text:
fail happened when running demo "resnet50_trainer.py" on multiple machine

logs of running "python resnet50_trainer.py" as below:
Ignoring @/caffe2/caffe2/contrib/nccl:nccl_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/contrib/gloo:gloo_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/contrib/gloo:gloo_ops_gpu as it is not a valid file.
Ignoring @/caffe2/caffe2/distributed:file_store_handler_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/distributed:redis_store_handler_ops as it is not a valid file.
INFO:resnet50_trainer:Running on GPUs: [0]
INFO:resnet50_trainer:Using epoch size: 1499968
INFO:data_parallel_model:Parallelizing model for devices: [0]
INFO:data_parallel_model:Create input and model training operators
INFO:data_parallel_model:Model for GPU: 0
INFO:data_parallel_model:Adding gradient operators
INFO:data_parallel_model:Add gradient all-reduces for SyncSGD
WARNING:data_parallel_model:Distributed computed params all-reduce not implemented yet
INFO:data_parallel_model:Post-iteration operators for updating params
INFO:data_parallel_model:Add initial parameter sync
WARNING:data_parallel_model:------- DEPRECATED API, please use data_parallel_model.OptimizeGradientMemory() -----
WARNING:memonger:NOTE: Executing memonger to optimize gradient memory
INFO:memonger:Remapping 128 blobs, using 19 shared
INFO:memonger:Memonger memory optimization took 0.0103449821472 secs
INFO:resnet50_trainer:----- Create test net ----
INFO:data_parallel_model:Parallelizing model for devices: [0]
INFO:data_parallel_model:Create input and model training operators
INFO:data_parallel_model:Model for GPU: 0
INFO:data_parallel_model:Parameter update function not defined --> only forward
Traceback (most recent call last):
File "resnet50_trainer.py", line 395, in
main()
File "resnet50_trainer.py", line 391, in main
Train(args)
File "resnet50_trainer.py", line 315, in Train
workspace.RunNetOnce(train_model.param_init_net)
File "/home/dl01/caffe2/build/caffe2/python/workspace.py", line 161, in RunNetOnce
return C.run_net_once(StringifyProto(net))
RuntimeError: [enforce fail at file_store_handler.cc:132] false. Wait timeout for name(s): allreduce_0_cw_op/1/0 Error from operator:
input: "store_handler" output: "allreduce_0_cw" name: "allreduce_0_cw_op" type: "CreateCommonWorld" arg { name: "rank" i: 0 } arg { name: "size" i: 2 } device_option { device_type: 1 cuda_gpu_id: 0 } engine: "GLOO"
ps :
try to use redis and nfs ,  but all is same problem, but i found the  warning "data_parallel_model:Distributed computed params all-reduce not implemented yet", maybe related with  the error ,
the srouce code of "caffe2/caffe2/python/data_parallel_model.py " as below:
def _BroadcastComputedParamsDistributed(
devices,
model,
rendezvous,
):
_BroadcastComputedParamsSingleHost(devices, model)
log.warn("Distributed computed params all-reduce not implemented yet")

Thanks for the report @dacson.
The real error here is [enforce fail at file_store_handler.cc:132] false. Wait timeout for name(s). This means one of the nodes times out waiting for (one of) the other node(s). If you use the file store handler, you'll have to pass a path to a shared filesystem, otherwise the nodes will never be able to find each other.
What was the error when you tried using the Redis handler?

Thanks for you answer@pietern.
I already found the reason for "time out" problem, due to hostname's setting is wrong.
But the still running fail, new problem occur for "redis" and "nfs"  two cases, the log as below:
Ignoring @/caffe2/caffe2/contrib/nccl:nccl_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/contrib/gloo:gloo_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/contrib/gloo:gloo_ops_gpu as it is not a valid file.
Ignoring @/caffe2/caffe2/distributed:file_store_handler_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/distributed:redis_store_handler_ops as it is not a valid file.
INFO:resnet50_trainer:Running on GPUs: [0]
INFO:resnet50_trainer:Using epoch size: 1499968
INFO:data_parallel_model:Parallelizing model for devices: [0]
INFO:data_parallel_model:Create input and model training operators
INFO:data_parallel_model:Model for GPU: 0
INFO:data_parallel_model:Adding gradient operators
INFO:data_parallel_model:Add gradient all-reduces for SyncSGD
WARNING:data_parallel_model:Distributed computed params all-reduce not implemented yet
INFO:data_parallel_model:Post-iteration operators for updating params
INFO:data_parallel_model:Add initial parameter sync
WARNING:data_parallel_model:------- DEPRECATED API, please use data_parallel_model.OptimizeGradientMemory() -----
WARNING:memonger:NOTE: Executing memonger to optimize gradient memory
INFO:memonger:Remapping 128 blobs, using 19 shared
INFO:memonger:Memonger memory optimization took 0.0102641582489 secs
*** Aborted at 1493956530 (unix time) try "date -d @1493956530" if you are using GNU date ***
PC: @     0x7f59ba51b9c8 gloo::transport::tcp::CreateDevice()
*** SIGSEGV (@0x10) received by PID 26645 (TID 0x7f59c107f740) from PID 16; stack trace: ***
@     0x7f59c0c78330 (unknown)
@     0x7f59ba51b9c8 gloo::transport::tcp::CreateDevice()
@     0x7f59b9840e1a _ZSt16__once_call_implISt12_Bind_simpleIFZN6caffe24gloo17CreateCommonWorldINS1_11CUDAContextEE12createDeviceEvEUlvE_vEEEvv
@     0x7f59c0c75a80 __GI___pthread_once
@     0x7f59b984192d ZN6caffe210RegistererISsNS_12OperatorBaseEJRKNS_11OperatorDefEPNS_9WorkspaceEEE14DefaultCreatorINS_4gloo17CreateCommonWorldINS_11CUDAContextEEEEESt10unique_ptrIS1_St14default_deleteIS1_EES4_S6
@     0x7f59ba8b27cf std::_Function_handler<>::_M_invoke()
@     0x7f59ba21cf95 caffe2::(anonymous namespace)::TryCreateOperator()
@     0x7f59ba21d3d1 caffe2::CreateOperator()
@     0x7f59ba20cead caffe2::SimpleNet::SimpleNet()
@     0x7f59ba20d23f caffe2::CreateNet()
@     0x7f59ba2136fc caffe2::Workspace::RunNetOnce()
@     0x7f59ba8b0d8f ZZN8pybind1112cpp_function10initializeIZN6caffe26python16addGlobalMethodsERNS_6moduleEEUlRKNS_5bytesEE18_bIS8_EINS_4nameENS_7siblingENS_5scopeEEEEvOT_PFT0_DpT1_EDpRKT2_ENKUlPNS_6detail15function_recordENS_6handleESR_SR_E1_clESQ_SR_SR_SR.isra.1406
@     0x7f59ba8b0fc7 ZZN8pybind1112cpp_function10initializeIZN6caffe26python16addGlobalMethodsERNS_6moduleEEUlRKNS_5bytesEE18_bIS8_EINS_4nameENS_7siblingENS_5scopeEEEEvOT_PFT0_DpT1_EDpRKT2_ENUlPNS_6detail15function_recordENS_6handleESR_SR_E1_4_FUNESQ_SR_SR_SR
@     0x7f59ba8b9ab2 pybind11::cpp_function::dispatcher()
@           0x523f6d (unknown)
@           0x5247ea (unknown)
@           0x555551 (unknown)
@           0x525560 (unknown)
@           0x555551 (unknown)
@           0x525560 (unknown)
@           0x567d14 (unknown)
@           0x465bf4 (unknown)
@           0x46612d (unknown)
@           0x466d92 (unknown)
@     0x7f59c08c1f45 (unknown)
@           0x577c2e (unknown)
@                0x0 (unknown)
Segmentation fault (core dumped)
PS :  Running parameter
def main():
# TODO: use argv
parser = argparse.ArgumentParser(
description="Caffe2: Resnet-50 training"
)
parser.add_argument("--train_data", type=str, default='/mnt/sdb1/data/train_lmdb',
help="Path to training data or 'everstore_sampler'",
required=False)
parser.add_argument("--test_data", type=str, default=None,
help="Path to test data")
parser.add_argument("--db_type", type=str, default="lmdb",
help="Database type (such as lmdb or leveldb)")
parser.add_argument("--gpus", type=str,
help="Comma separated list of GPU devices to use")
parser.add_argument("--num_gpus", type=int, default=1,
help="Number of GPU devices (instead of --gpus)")
parser.add_argument("--num_channels", type=int, default=3,
help="Number of color channels")
parser.add_argument("--image_size", type=int, default=227,
help="Input image size (to crop to)")
parser.add_argument("--num_labels", type=int, default=2,
help="Number of labels")
parser.add_argument("--batch_size", type=int, default=32,
help="Batch size, total over all GPUs")
parser.add_argument("--epoch_size", type=int, default=1500000,
help="Number of images/epoch, total over all machines")
parser.add_argument("--num_epochs", type=int, default=1000,
help="Num epochs.")
parser.add_argument("--base_learning_rate", type=float, default=0.1,
help="Initial learning rate.")
parser.add_argument("--weight_decay", type=float, default=1e-4,
help="Weight decay (L2 regularization)")
parser.add_argument("--cudnn_workspace_limit_mb", type=int, default=64,
help="CuDNN workspace limit in MBs")
parser.add_argument("--num_shards", type=int, default=2,
help="Number of machines in distributed run")
parser.add_argument("--shard_id", type=int, default=0,
help="Shard id.")
parser.add_argument("--run_id", type=str, default='437',
help="Unique run identifier (e.g. uuid)")
#parser.add_argument("--redis_host", type=str, default='172.25.34.12',
#                    help="Host of Redis server (for rendezvous)")
parser.add_argument("--redis_host", type=str,
help="Host of Redis server (for rendezvous)")
parser.add_argument("--redis_port", type=int, default=6379,
help="Port of Redis server (for rendezvous)")
parser.add_argument("--file_store_path", type=str, default='/mnt/nfs-12',
help="Path to directory to use for rendezvous")
args = parser.parse_args()
Train(args)

if name == 'main':
workspace.GlobalInit(['caffe2', '--caffe2_log_level=2'])
main()

Wow, I haven't seen that one before! The segfault happens gloo::transport::tcp::CreateDevice. Could you rebuild Caffe2 with -DCMAKE_BUILD_TYPE=Debug and try running again? This will hopefully give us some more information about where exactly the crash is happening. Many thanks!

Thanks your analysis！
No problem, i will upload the debug info 's logs for you next monday,

@pietern , below is logs of debug version, please check again, thanks!
Ignoring @/caffe2/caffe2/contrib/nccl:nccl_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/contrib/gloo:gloo_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/contrib/gloo:gloo_ops_gpu as it is not a valid file.
Ignoring @/caffe2/caffe2/distributed:file_store_handler_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/distributed:redis_store_handler_ops as it is not a valid file.
INFO:resnet50_trainer:Running on GPUs: [0]
INFO:resnet50_trainer:Using epoch size: 1499968
INFO:data_parallel_model:Parallelizing model for devices: [0]
INFO:data_parallel_model:Create input and model training operators
INFO:data_parallel_model:Model for GPU: 0
INFO:data_parallel_model:Adding gradient operators
INFO:data_parallel_model:Add gradient all-reduces for SyncSGD
WARNING:data_parallel_model:Distributed computed params all-reduce not implemented yet
INFO:data_parallel_model:Post-iteration operators for updating params
INFO:data_parallel_model:Add initial parameter sync
WARNING:data_parallel_model:------- DEPRECATED API, please use data_parallel_model.OptimizeGradientMemory() -----
WARNING:memonger:NOTE: Executing memonger to optimize gradient memory
INFO:memonger:Remapping 128 blobs, using 19 shared
INFO:memonger:Memonger memory optimization took 0.0105330944061 secs
*** Aborted at 1494218887 (unix time) try "date -d @1494218887" if you are using GNU date ***
PC: @     0x7f4f48847a31 gloo::transport::tcp::CreateDevice()
*** SIGSEGV (@0x0) received by PID 29113 (TID 0x7f4f4f859740) from PID 0; stack trace: ***
@     0x7f4f4f452330 (unknown)
@     0x7f4f48847a31 gloo::transport::tcp::CreateDevice()
@     0x7f4f46e138a2 _ZZN6caffe24gloo17CreateCommonWorldINS_11CUDAContextEE12createDeviceEvENKUlvE_clEv
@     0x7f4f46e13e7c _ZNSt12_Bind_simpleIFZN6caffe24gloo17CreateCommonWorldINS0_11CUDAContextEE12createDeviceEvEUlvE_vEE9_M_invokeIIEEEvSt12_Index_tupleIIXspT_EEE
@     0x7f4f46e13dbf _ZNSt12_Bind_simpleIFZN6caffe24gloo17CreateCommonWorldINS0_11CUDAContextEE12createDeviceEvEUlvE_vEEclEv
@     0x7f4f46e13c54 _ZSt16__once_call_implISt12_Bind_simpleIFZN6caffe24gloo17CreateCommonWorldINS1_11CUDAContextEE12createDeviceEvEUlvE_vEEEvv
@     0x7f4f4f44fa80 __GI___pthread_once
@     0x7f4f46e12d93 __gthread_once()
@     0x7f4f46e13b39 ZSt9call_onceIZN6caffe24gloo17CreateCommonWorldINS0_11CUDAContextEE12createDeviceEvEUlvE_JEEvRSt9once_flagOT_DpOT0
@     0x7f4f46e13a11 caffe2::gloo::CreateCommonWorld<>::createDevice()
@     0x7f4f46e13707 caffe2::gloo::CreateCommonWorld<>::CreateCommonWorld()
@     0x7f4f46e133ca caffe2::Registerer<>::DefaultCreator<>()
@     0x7f4f4900d63a std::_Function_handler<>::_M_invoke()
@     0x7f4f483519d0 std::function<>::operator()()
@     0x7f4f4834f5da ZN6caffe28RegistryISsNS_12OperatorBaseEJRKNS_11OperatorDefEPNS_9WorkspaceEEE6CreateERKSsS4_S6
@     0x7f4f4834a5fb caffe2::(anonymous namespace)::TryCreateOperator()
@     0x7f4f4834ac38 caffe2::CreateOperator()
@     0x7f4f48329bb2 caffe2::SimpleNet::SimpleNet()
@     0x7f4f4832bc2c ZN6caffe211make_uniqueINS_9SimpleNetEJRKNS_6NetDefERPNS_9WorkspaceEEEENSt9enable_ifIXntsrSt8is_arrayIT_E5valueESt10unique_ptrISA_St14default_deleteISA_EEE4typeEDpOT0
@     0x7f4f48329723 caffe2::CreateNet()
@     0x7f4f48334a2c caffe2::Workspace::RunNetOnce()
@     0x7f4f48fd29b0 ZZN6caffe26python16addGlobalMethodsERN8pybind116moduleEENKUlRKNS1_5bytesEE18_clES6
@     0x7f4f48fed41a _ZN8pybind116detail11type_casterISt5tupleIIRKNS_5bytesEEEvE4callIbRZN6caffe26python16addGlobalMethodsERNS_6moduleEEUlS5_E18_ILm0EEEET_OT0_NS0_14index_sequenceIIXspT1_EEEE
@     0x7f4f48fec0a6 ZN8pybind116detail11type_casterISt5tupleIIRKNS_5bytesEEEvE4callIbRZN6caffe26python16addGlobalMethodsERNS_6moduleEEUlS5_E18_EENSt9enable_ifIXntsrSt7is_voidIT_E5valueESH_E4typeEOT0
@     0x7f4f48fe8524 ZZN8pybind1112cpp_function10initializeIZN6caffe26python16addGlobalMethodsERNS_6moduleEEUlRKNS_5bytesEE18_bIS8_EINS_4nameENS_7siblingENS_5scopeEEEEvOT_PFT0_DpT1_EDpRKT2_ENKUlPNS_6detail15function_recordENS_6handleESR_SR_E1_clESQ_SR_SR_SR
@     0x7f4f48fe8620 ZZN8pybind1112cpp_function10initializeIZN6caffe26python16addGlobalMethodsERNS_6moduleEEUlRKNS_5bytesEE18_bIS8_EINS_4nameENS_7siblingENS_5scopeEEEEvOT_PFT0_DpT1_EDpRKT2_ENUlPNS_6detail15function_recordENS_6handleESR_SR_E1_4_FUNESQ_SR_SR_SR
@     0x7f4f48ff6a14 pybind11::cpp_function::dispatcher()
@           0x523f6d (unknown)
@           0x5247ea (unknown)
@           0x555551 (unknown)
@           0x525560 (unknown)
@           0x555551 (unknown)
Segmentation fault (core dumped)

I run the same script and it also fail from different error message. (debug version)
OS: Ubuntu 16.04
gcc 5.4
cudnn: 6.0
cuda: 8.0
ThinkPad-T460
GeForce 940MX/PCIe/SSE2
python resnet50_trainer.py --train_data ../../python/tutorials/tutorial_data/mnist/mnist-train-nchw-leveldb/ --db_type leveldb
Ignoring @/caffe2/caffe2/contrib/nccl:nccl_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/contrib/gloo:gloo_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/contrib/gloo:gloo_ops_gpu as it is not a valid file.
Ignoring @/caffe2/caffe2/distributed:file_store_handler_ops as it is not a valid file.
Ignoring @/caffe2/caffe2/distributed:redis_store_handler_ops as it is not a valid file.
INFO:resnet50_trainer:Running on GPUs: [0]
INFO:resnet50_trainer:Using epoch size: 1500000
INFO:data_parallel_model:Parallelizing model for devices: [0]
INFO:data_parallel_model:Create input and model training operators
INFO:data_parallel_model:Model for GPU: 0
INFO:data_parallel_model:Adding gradient operators
INFO:data_parallel_model:Add gradient all-reduces for SyncSGD
INFO:data_parallel_model:Post-iteration operators for updating params
INFO:data_parallel_model:Add initial parameter sync
WARNING:data_parallel_model:------- DEPRECATED API, please use data_parallel_model.OptimizeGradientMemory() -----
WARNING:memonger:NOTE: Executing memonger to optimize gradient memory
INFO:memonger:Remapping 128 blobs, using 19 shared
INFO:memonger:Memonger memory optimization took 0.00809907913208 secs
INFO:resnet50_trainer:Starting epoch 0/1000
terminate called after throwing an instance of 'caffe2::EnforceNotMet'
what():  [enforce fail at context_gpu.cu:398] error == cudaSuccess. 2 vs 0. Error at: /home/kazami/workspace/caffe2/caffe2/core/context_gpu.cu:398: out of memory Error from operator:
input: "gpu_0/comp_0_sum_3" input: "gpu_0/comp_1_spatbn_3" output: "gpu_0/comp_1_sum_3" name: "" type: "Sum" device_option { device_type: 1 cuda_gpu_id: 0 }
*** Aborted at 1494389721 (unix time) try "date -d @1494389721" if you are using GNU date ***
PC: @     0x7fc6e1e98428 gsignal
*** SIGABRT (@0x3e800003e49) received by PID 15945 (TID 0x7fc6967fc700) from PID 15945; stack trace: ***
@     0x7fc6e223d390 (unknown)
@     0x7fc6e1e98428 gsignal
@     0x7fc6e1e9a02a abort
@     0x7fc6d41f784d __gnu_cxx::__verbose_terminate_handler()
@     0x7fc6d41f56b6 (unknown)
@     0x7fc6d41f5701 std::terminate()
@     0x7fc6d4220d38 (unknown)
@     0x7fc6e22336ba start_thread
@     0x7fc6e1f6982d clone
@                0x0 (unknown)
Terminated (core dumped)

@dacson hello, dacson~ I met the same error as you mentioned above.
When I run distributed version resnet50_trainer.py with mpirun, "timeout" occured.
You said the error you encountered is due to hostname's setting is wrong, so how did you altered the hostname? using IP address or other method?
could you share your opinions please? Thanks:)

authors: Knight-X dacson githubgsq pietern


text:
Problems with batch normalization

Hi everyone.
I have a problem with brew.spatial_bn during test time. If I train and test in the same session, everything is fine, but if simply try to load my pretrained model I get the following error:
RuntimeError: [enforce fail at operator.cc:26] blob != nullptr. op SpatialBN: Encountered a non-existing input blob: myBlobName
I load and save my models using these methods: https://github.com/peterneher/peters-stuff/blob/master/Caffe2Scripts/classification_no_db_example.py#L104-L130
The batch norm is created in the following way:
myBlobName = brew.spatial_bn(m, brew.relu(m, brew.conv(m, 'data', 'conv_1_1', dim_in=1, dim_out=base_n_filters, kernel=kernel_size, pad=pad), 'nonl_1_1'), 'myBlobName', dim_in=base_n_filters, epsilon=1e-3, momentum=0.1, is_test=is_test)
Any ideas?
Cheers,
Peter

I load and save my models using these methods: https://github.com/peterneher/peters-stuff/blob/master/Caffe2Scripts/classification_no_db_example.py#L104-L130

The batch norm is created in the following way:
myBlobName = brew.spatial_bn(m, brew.relu(m, brew.conv(m, 'data', 'conv_1_1', dim_in=1, dim_out=base_n_filters, kernel=kernel_size, pad=pad), 'nonl_1_1'), 'myBlobName', dim_in=base_n_filters, epsilon=1e-3, momentum=0.1, is_test=is_test)

@peterneher I have the same problem, had you solve it ?

Unfortunately not.

@peterneher
I reference your code, and facing same problem.
Though I change loafing method like https://caffe2.ai/docs/tutorial-loading-pre-trained-models.html, it still can work.
Have you found the solution yet?

@peterneher
I used brew.group_conv() to implement mobilenet and encountered same problem. When I tried to load the model exported to Android, the predictor didn't work.
RuntimeError: [enforce fail at operator.cc:30] blob != nullptr. op SpatialBN: Encountered a non-existing input blob: conv1_spatbn_rm

@lhCheung1991
please refer this post https://github.com/caffe2/caffe2/issues/884
I have found answer in last comment.

You should save extra parameter with _rm and _riv in init_net, predict_net in your save fuction.
It is no need to change loading function.

@steven5401
I have tried it, it works! Thanks a lot!
It seems that Caffe2 don't treat the input blobs, which are *_riv and *_rm, of SpatialBN as part of parameters of model.params. It causes the problem.
Is it a bug?!

@steven5401 @zhouyongxiu  could you pls share your code as an example?
I have some issue! thanks a lot!!!

@steven5401 Hi, after I train the resnet50, I don't know how to save it as pb and use it, could you pls share your code as an example?

You may have a look at https://zhuanlan.zhihu.com/p/45067948 or  https://github.com/CivilNet/Gemfield/blob/master/src/python/caffe2/resnet50_gemfield.py or

Hi @BIGBALLON ,
is it possible to use the save_net method for the BN_layer case as a general case (network with AND without BN layer)? Are there any issues when using it and the network has no BN layer?

source: gharchive/issue

authors: BIGBALLON CarlosYeverino RiweiChen gemfield lhCheung1991 peterneher steven5401

license_type: permissive

license_source: bigquery


text:
ggpicrust2 no plot!

no figure is showed,why?

伸手党滚

烦不烦人啊你，不知道自己的debug啊，讲话也没礼貌，滚！

自己示例文件都这么多错误，不想解决办法，不知道谁没礼貌

你自己配不来环境怪别人是吧。巨婴，什么都要别人教是吧，这么多人都能跑出来，为什么不想想是自己的问题？
luozhy88 @.***>于2023年4月6日 周四23:28写道：

自己示例文件都这么多错误，不想解决办法，不知道谁没礼貌
—
Reply to this email directly, view it on GitHub
https://github.com/cafferychen777/ggpicrust2/issues/12#issuecomment-1499253150,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ATZEQTWWOVHYJHYXOG3Q76DW73OKLANCNFSM6AAAAAAWVP4ZQU
.
You are receiving this because you modified the open/close state.Message
ID: @.***>

从你说话可以看出，1 你没有耐心 2你脾气很火爆 3自己出了问题还不让别人说。你这些问题我从头看也能解决，只不过帮助你改善你的包而已

你不是一直做伸手党？你有帮助改住一个真正的bug?你自己看的来代码吗？弱智，教程都看不懂
luozhy88 @.***>于2023年4月6日 周四23:52写道：

从你说话可以看出，1 你没有耐心 2你脾气很火爆 3自己出了问题还不让别人说。你这些问题我从头看也能解决，只不过帮助你改善你的包而已
—
Reply to this email directly, view it on GitHub
https://github.com/cafferychen777/ggpicrust2/issues/12#issuecomment-1499283207,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ATZEQTRYEWEL3SELRLVKOLTW73RDXANCNFSM6AAAAAAWVP4ZQU
.
You are receiving this because you modified the open/close state.Message
ID: @.***>

license: MIT

license_source: github-api


text:
feat(manuals): add manuals of plugins and clientset

What this PR does / why we need it:

Rename some chapters.
Add manuals of version and healthcheck
Add best-practice of ClientSet

Which issue(s) this PR is related to (optional, link to 3rd issue(s)):
Fixes #
Reference to #

Special notes for your reviewer:
/cc @ddysher
/cc @zjj2wry

Release note:

NONE

/assign @ddysher
/assign @zjj2wry

/lgtm

@ddysher  PTAL

/lgtm

source: gharchive/pull-request

authors: ddysher kdada zjj2wry

repo: caicloud/nirvana


text:
improper image header error

just running one of the examples. Am I missing something is the code broken?

Possible reason for this error:

the convert command -- make sure you have installed ImageMagick correctly
the file system you're using -- PNG files was created without image headers

I installed the latest version of ImageMagick on a simple debian 7 server. No rocket science. It just won't work with the latest version of ImageMagick. Which version of ImageMagick did you use originally?

I've tested the examples in the README.md on my Ubuntu 16.04 server and they worked as expected. Do you use Docker? You can use Docker image like this:
FROM alpine:edge
RUN apk add --no-cache bash imagemagick bc wget libpng-dev

Or run these commands one by one:
cd baidu-maps-download
docker run -it --rm -v="$PWD:/bmd" -w="/bmd" alpine:edge sh
apk add --no-cache bash imagemagick bc wget libpng-dev
bash center2pieces.sh 12616085.15, 2628677.18 15 web-alt 1000 1000 | xargs bash pieces2one.sh
exit
# now you should see the file done.png in the maps directory.

repo: caiguanhao/baidu-maps-download


text:
:bug: Fix incorrect cancellation of training request for thread executor

Changes

Currently the local thread executor is incorrectly calling cancel function when getting to __del__ function at the end. This will cause false alarms where training gets successfully completed but at the end we would see Terminated error message, which can cause confusion.

Potentially more changes coming so moving this to draft for now

repo: caikit/caikit


text:
move profiling sub-section to it's own section

following https://github.com/cairo-book/cairo-book/pull/996
add a new chapter 10.3 specifically for benchmarking. it's a bit too much for hte "write tests" section

J

hello can i be assigned this issue. Thank you

authors: GoSTEAN akintewe enitrat

repo: cairo-book/cairo-book


text:
Sideload with windows

Hi! I use cario to eliminate windows explorer so I can edit files for a game, but I don't want to fully run my pc on this software 24/7. Is there a way to keep cario installed but access it with a .exe when I need to load into it?
Thanks in advance!
-Seth Norton

While cairo is running do you want explorer running
Sent from my iPhone
On Aug 24, 2019, at 1:05 PM, sethnorton2000 <notifications@github.commailto:notifications@github.com> wrote:
Hi! I use cario to eliminate windows explorer so I can edit files for a game, but I don't want to fully run my pc on this software 24/7. Is there a way to keep cario installed but access it with a .exe when I need to load into it?
Thanks in advance!
-Seth Norton
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHubhttps://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcairoshell%2Fcairoshell%2Fissues%2F276%3Femail_source%3Dnotifications%26email_token%3DABWFOAK7RUXLG7OOWIA2JDDQGFS45A5CNFSM4IPGWXB2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HHGDUSA&data=02|01||09b7f4e4f7ba42a3b73308d728b53e24|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|637022631201702676&sdata=jOVg5o3xOc%2FS5VskDDBMH%2BSTPQi3R87XTc42eKDMzrA%3D&reserved=0, or mute the threadhttps://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FABWFOAOOWCHU6VTJPEZ5DW3QGFS45ANCNFSM4IPGWXBQ&data=02|01||09b7f4e4f7ba42a3b73308d728b53e24|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|637022631201712687&sdata=F8imyOtN71kSQRgkFQz1PT1jE9qNBcCZmQtwu0BZTts%3D&reserved=0.

no, I use cario as the explorer

From: Joe notifications@github.com
Sent: Saturday, August 24, 2019 10:37:03 AM
To: cairoshell/cairoshell cairoshell@noreply.github.com
Cc: sethnorton2000 seth.norton2000@hotmail.com; Author author@noreply.github.com
Subject: Re: [cairoshell/cairoshell] Sideload with windows (#276)
While cairo is running do you want explorer running
Sent from my iPhone
On Aug 24, 2019, at 1:05 PM, sethnorton2000 <notifications@github.commailto:notifications@github.com> wrote:
Hi! I use cario to eliminate windows explorer so I can edit files for a game, but I don't want to fully run my pc on this software 24/7. Is there a way to keep cario installed but access it with a .exe when I need to load into it?
Thanks in advance!
-Seth Norton
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHubhttps://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcairoshell%2Fcairoshell%2Fissues%2F276%3Femail_source%3Dnotifications%26email_token%3DABWFOAK7RUXLG7OOWIA2JDDQGFS45A5CNFSM4IPGWXB2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HHGDUSA&data=02|01||09b7f4e4f7ba42a3b73308d728b53e24|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|637022631201702676&sdata=jOVg5o3xOc%2FS5VskDDBMH%2BSTPQi3R87XTc42eKDMzrA%3D&reserved=0, or mute the threadhttps://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FABWFOAOOWCHU6VTJPEZ5DW3QGFS45ANCNFSM4IPGWXBQ&data=02|01||09b7f4e4f7ba42a3b73308d728b53e24|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|637022631201712687&sdata=F8imyOtN71kSQRgkFQz1PT1jE9qNBcCZmQtwu0BZTts%3D&reserved=0.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/cairoshell/cairoshell/issues/276?email_source=notifications&email_token=AHWR4TAINQ4EB7ERKJVBA63QGFWT7A5CNFSM4IPGWXB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5CENVA#issuecomment-524568276, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AHWR4TFVTEWK66ABQ7T5XW3QGFWT7ANCNFSM4IPGWXBQ.

What you would probably want to do is:
Kill explorer and then open cairo

Well how do I open cario? No .exe it creates when installed, in order to run it I have to run the entire installation process again

From: Joe notifications@github.com
Sent: Saturday, August 24, 2019 10:41:28 AM
To: cairoshell/cairoshell cairoshell@noreply.github.com
Cc: sethnorton2000 seth.norton2000@hotmail.com; Author author@noreply.github.com
Subject: Re: [cairoshell/cairoshell] Sideload with windows (#276)
What you would probably want to do is:
Kill explorer and then open cairo
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/cairoshell/cairoshell/issues/276?email_source=notifications&email_token=AHWR4TFY2B6V5CIR2B4TGWTQGFXERA5CNFSM4IPGWXB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5CEPSA#issuecomment-524568520, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AHWR4TE2B53BIXBCGCUVADDQGFXERANCNFSM4IPGWXBQ.

Once installed it should be accessible, at anytime. Dont set it as shell

Gotcha, one more question. When I play overwatch while Cairo is open, it really seems to be eating my frames, I normally run at 300fps smoothly but when Cairo is open, I run at 120 or less, is there any optimization I can to do so it doesn’t take up as many frames?

From: Joe notifications@github.com
Sent: Saturday, August 24, 2019 10:45:19 AM
To: cairoshell/cairoshell cairoshell@noreply.github.com
Cc: sethnorton2000 seth.norton2000@hotmail.com; Author author@noreply.github.com
Subject: Re: [cairoshell/cairoshell] Sideload with windows (#276)
Once installed it should be accessible, at anytime. Dont set it as shell
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/cairoshell/cairoshell/issues/276?email_source=notifications&email_token=AHWR4TEOQIYSVEA23BVBNJLQGFXS7A5CNFSM4IPGWXB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5CERWQ#issuecomment-524568794, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AHWR4TFQFGZMKKK2GWI2AL3QGFXS7ANCNFSM4IPGWXBQ.

You can try turning off hardware rendering. That will eat cpu cycles instead of gpu. There is a setting for it in cairo
Sent from my iPhone
On Aug 24, 2019, at 3:57 PM, sethnorton2000 <notifications@github.commailto:notifications@github.com> wrote:
Gotcha, one more question. When I play overwatch while Cairo is open, it really seems to be eating my frames, I normally run at 300fps smoothly but when Cairo is open, I run at 120 or less, is there any optimization I can to do so it doesn’t take up as many frames?

From: Joe <notifications@github.commailto:notifications@github.com>
Sent: Saturday, August 24, 2019 10:45:19 AM
To: cairoshell/cairoshell <cairoshell@noreply.github.commailto:cairoshell@noreply.github.com>
Cc: sethnorton2000 <seth.norton2000@hotmail.commailto:seth.norton2000@hotmail.com>; Author <author@noreply.github.commailto:author@noreply.github.com>
Subject: Re: [cairoshell/cairoshell] Sideload with windows (#276)
Once installed it should be accessible, at anytime. Dont set it as shell
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/cairoshell/cairoshell/issues/276?email_source=notifications&email_token=AHWR4TEOQIYSVEA23BVBNJLQGFXS7A5CNFSM4IPGWXB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5CERWQ#issuecomment-524568794, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AHWR4TFQFGZMKKK2GWI2AL3QGFXS7ANCNFSM4IPGWXBQ.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHubhttps://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcairoshell%2Fcairoshell%2Fissues%2F276%3Femail_source%3Dnotifications%26email_token%3DABWFOAOVJA5TBMEWODUVKPTQGGHB3A5CNFSM4IPGWXB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5CGOBY%23issuecomment-524576519&data=02|01||23a17e0284f047fe014e08d728cd4568|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|637022734402963665&sdata=ZTNfhIJSuh4aIbO1P%2B6c9t4qKkiV8JQ%2BuwT5y5URifY%3D&reserved=0, or mute the threadhttps://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FABWFOAKVOLYSPJSE7YUPRQLQGGHB3ANCNFSM4IPGWXBQ&data=02|01||23a17e0284f047fe014e08d728cd4568|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|637022734402973676&sdata=l4NGmwwCqeJoCNRMt1%2FHcdBvppOVfVXB5EoyZQi6Mic%3D&reserved=0.

Questions answered; closing. Feel free to re-open if this is incorrect!

authors: dremin josuave sethnorton2000

repo: cairoshell/cairoshell


text:
SAX-NeRF Testing

Hello.
I am encountering an error while testing with test.py. It seems to be a compilation-related message. How should I resolve it?

Hi, thanks for your interest.
This error message shows a problem related to checking the compiler version in torch.utils.cpp_extension. Specifically, the error occurred when attempting to use the where command to locate the cl compiler, which returned a non-zero exit status, indicating that the cl command was not found. This typically means that the Visual C++ compiler is not correctly installed or its path is not added to the environment variables.
Here are my suggestions to fix this bug:

Confirm Visual Studio and C++ Tools Installation: Ensure that Visual Studio is installed on your computer, and that you selected the C++ desktop development environment during installation.
Check Environment Variables: Make sure the path to the Visual C++ compiler (usually something like C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC<version>\bin\Hostx64\x64) is added to your system's environment variables.
Reopen Command Line: After installing or modifying environment variables, reopen your command line window to ensure the updates are applied.
Check Python Package Dependencies: Ensure your torch and related dependencies are up to date, as older versions of libraries can have compatibility issues.

In general, I do not suggest you use Windows system to execute the code because windows system usually cause many weird bugs. It is much better to use Ubuntu system.
If you find our repo useful, please help us star it, thanks!


text:
Add command line option to display build target graph

First off, thanks for Cake - I use it for all my personal projects and in my day job, so really appreciate the work you guys have put into it 🙂
I've put together a PR for #1383 as it's something I'd find pretty useful. I made the command line option --showtree or --tree. Most of the implementation is pretty straight forward, but there's one point in particular I'm not sure about.
The existing CakeGraph is one of the easiest ways to get the "top level" tasks. However, currently the CakeGraph and CakeGraphBuilder are internal classes of Cake.Core. In order to make it available to Cake, we could either

Make CakeGraphBuilder, CakeGraph, and CakeGraphEdge public
Add [InternalsVisibleTo("Cake")] to the Cake.Core` project

I went for the latter, as it seemed the easiest!
The other point of interest is a MaxDepth constant that could be used to limit how deep the tree is. At the moment it's just "hidden" functionality (a constant set to 0) as I wasn't sure whether it was worth exposing it.

@andrewlock Really cool and useful feature!
Would it be possible to use different foreground colors for delegating tasks (tasks without actions) and top level tasks? Perhaps gray for delegating and cyan for root tasks? I've already approved this PR, so if you feel like moving on, we can revisit this at a later point.
Great job! 👍
@cake-build/cake-team Any additional feedback?

Good idea - I've added this to the PR. IT now displays top-level tasks in Cyan, delegating in Gray, and standard in Green.
The Actions and DelayedActions properties aren't exposed in ICakeTaskInfo, so I had to cast them to a CakeTask to find out if it's a delegating task. A bit hacky, but the other option of modifying the ICakeTaskInfo interface, or adding a new interface to CakeTask seemed t0o heavy-handed for a small feature.
The output from the command line now looks something like this:

Or with inverted colours (the console in VS Code):

LGTM and I think fixes also the use case of #1506

authors: andrewlock pascalberger patriksvensson

repo: cake-build/cake


text:
🛑 XMR USA Servers is down

In e03b626, XMR USA Servers ($XMR_USA) was down:

HTTP code: 0
Response time: 0 ms

Resolved: XMR USA Servers is back up in ddc88af after 4 hours, 22 minutes.

repo: cake-tech/upptime-cakewallet


text:
🛑 xmr-node.cakewallet.com:18081 is down

In 887bd2f, xmr-node.cakewallet.com:18081 (xmr-node.cakewallet.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: xmr-node.cakewallet.com:18081 is back up in f674c63 after 14 minutes.

repo: cake-tech/upptime-monerocom


text:
🛑 node.moneroworld.com:18089 is down

In 491e08a, node.moneroworld.com:18089 (node.moneroworld.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: node.moneroworld.com:18089 is back up in 1bca066.


text:
🛑 node.community.rino.io:18081 is down

In abc3def, node.community.rino.io:18081 (node.community.rino.io) was down:

HTTP code: 0
Response time: 0 ms

Resolved: node.community.rino.io:18081 is back up in 4f3b5ea after 10 minutes.


text:
add fix for mariadb virtual column creation

When using virtual column definition with Literal class, migration fails with SQL syntax error on MariaDB as NOT NULL or NULL are not allowed at the end of column definition.  Below is the link to an issue.
Fixes https://github.com/cakephp/phinx/issues/2157

Fixes #2157

I'm not sure if it's overly reasonable to completely break the null option for all literal type usages with MariaDB, just because of this one quirks.
Maybe the check should rather look for SQL that is incompatible with [NOT] NULL, or maybe it should be possible to explicitly suppress generating [NOT] NULL?
In any case, this should have tests. Since existing tests didn't break, there seems to already be missing coverage.

We don't currently test against mariadb, so we'd need to wire that up before we could have a good test for this. MySQL does happily allow null and not null for virtual columns so I wouldn't expect our existing tests to be able to cover this.

It could then be fixed with option to explicitly suppress null and not null as @ndm2 suggested. It is not needed on most MySQL and MariaDB column creation (except on TIMESTAMP type).

Is there an argument to say that adding options to a Literal column type is unnecessary? By definition we are manually specifying the column and allowing options just adds complexity.
Then we might do;
        if (!$column->getType() instanceof Literal) {
            $def .= $column->getEncoding() ? ' CHARACTER SET ' . $column->getEncoding() : '';
            $def .= $column->getCollation() ? ' COLLATE ' . $column->getCollation() : '';
            $def .= !$column->isSigned() && isset($this->signedColumnTypes[$column->getType()]) ? ' unsigned' : '';
            $def .= $column->isNull() ? ' NULL' : ' NOT NULL';
        }

@ndm2 So you think we shouldn't merge this?

@dereuromark Not in this state, no. IMHO there should either be an option to exclude [not] null generation, or there should be a clear way to define the whole column creation SQL via a Literal object. I would also second @MasterOdin that this should have an actual test on MariaDB.

repo: cakephp/phinx


text:
How to enable mouse click animations/transitions on Icons?

Is there a simple way of doing this?

figured it out - SVG Icons need to be nested inside IconButton

Hi raptoria ，
I also encountered the same problem, can you give an example？
thanks

ah, what I meant was if you want to get the default button animations, or make use of a mouse event (to turn on a custom animation), you have to wrap your SVG Icon inside of the IconButton http://www.material-ui.com/#/components/icon-button

I found an example , http://tympanus.net/Development/AnimatedSVGIcons/
I intend to when  user clicks Appbar 's menu, the menu icon transform to NavigationClose icon,
This case, how to achieve use svgIcon
thanks.

authors: hellereye raptoria

repo: callemall/material-ui


text:
Menu falls on no menuItems

By default selectedIndex is 0, but if there is no data (menuItems) component Menu falls:
https://monosnap.com/image/HmoqBhIia0HdoXWJjGtCjlKs83Hg3l

This is no longer an issue; I just rebuilt the docs locally with an empty array for one of the menus. The Menu is created successfully. However, an empty 8px padded div is created. Do we want to open a separate issue so that the menu is not visible if its menuItems array is empty?

I think no.

Have you pulled the latest master and built that?

@jkruder is right that this is no longer an issue. When no menuItems are present an empty padded div is created as he mentions as well. I'm closing this issue. @deser if you would prefer that the empty div is not visible, please open a seperate issue. Thank you!

authors: deser jkruder mmrtnz


text:
AppBar do not work in old android devices

there is no webkit prefix, so It does not work.
Material-UI version: 0.14.3

Is this working on with the v0.14.2 release?

@oliviertassinari

Is this working with the v0.14.2 release？

yes，0.14.2 works.
It seems that the default prefix is set as display:flex in 0.14.3
and in 0.14.2 display:-webkit-flex;

This seems related to this: https://github.com/rofrischmann/inline-style-prefixer/issues/45

Same issue here. It seems to also break PageSpeed Insights test.

Closing this. If its still an issue do comment below and I will reopen this.

authors: costlife hourliert newoga oliviertassinari tintin1343


text:
Support multi-line search patterns

bump-my-version version: 0.11.0
Python version: 3.10.12
Operating System: Ubuntu 22.04 LTS

Description
This is more of a question, than a problem: I am trying to use bump-my-version to automate versioning for helm-charts. The files I want to bump look like this:
apiVersion: v2
appVersion: "11.2.1"
description: Intershop Commerce Management - ICM
# name and version must be in this exact order, otherwise bump2version won't work
name: icm
version: 1.4.0
# test related annotations
annotations:
  requestedMemoryQuota: 5900Mi
  requestedCpuQuotaInMinutes: "2500"
dependencies:
  - name: icm-as
    version: 1.3.0
    repository: file://../icm-as
  - name: icm-web
    version: 0.8.0
    repository: file://../icm-web
    condition: icm-web.enabled
  - name: mailhog
    version: 5.2.0
    repository: https://codecentric.github.io/helm-charts
    condition: mailhog.enabled
  - name: redis
    version: 17.15.2
    repository: https://charts.bitnami.com/bitnami
    condition: redis.enabled
  - name: redis-cluster
    version: 8.6.12
    repository: https://charts.bitnami.com/bitnami
    condition: redis-cluster.enabled

Note that there are many versions in this file, and using search/replace I can't simply look for the version, instead I also need to take the name as "context". Additionally, a single version may affect multiple files since we have multiple subcharts which depend on each other.
I was trying to achieve this behavior with this .bumpversion.cfg file in bump2version:
[bumpversion]
current_version = 1.4.0

[bumpversion:file:Chart.yaml]
search = name: icm
	version: {current_version}
replace = {new_version}

[bumpversion:file:../icm-replication/Chart.yaml]
search = name: icm
	version: {current_version}
replace = {new_version}

This didn't work though, because for some reason bump2version treats the first search pattern differently than the second (for the first pattern it replaces the whole search with the new version, in the second pattern only the {current_version} part).
When I tried this config with bump-my-version I simply got an error:
Bumping version of 'icm-as' to next 'minor' value.
Could not execute version bump.
Return code 1
STDERR:
Traceback (most recent call last):
  File "/home/cortlepp/.local/bin/bump-my-version", line 8, in <module>
    sys.exit(cli())
  File "/usr/lib/python3/dist-packages/click/core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "/home/cortlepp/.local/lib/python3.10/site-packages/rich_click/rich_command.py", line 126, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/home/cortlepp/.local/lib/python3.10/site-packages/bumpversion/cli.py", line 283, in bump
    config = get_configuration(found_config_file, **overrides)
  File "/home/cortlepp/.local/lib/python3.10/site-packages/bumpversion/config.py", line 194, in get_configuration
    config_dict["files"] = get_all_file_configs(config_dict)
  File "/home/cortlepp/.local/lib/python3.10/site-packages/bumpversion/config.py", line 165, in get_all_file_configs
    return [FileConfig(**f) for f in files]
  File "/home/cortlepp/.local/lib/python3.10/site-packages/bumpversion/config.py", line 165, in <listcomp>
    return [FileConfig(**f) for f in files]
  File "/home/cortlepp/.local/lib/python3.10/site-packages/pydantic/main.py", line 164, in __init__
    __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
pydantic_core._pydantic_core.ValidationError: 1 validation error for FileConfig
search
  Input should be a valid string [type=string_type, input_value=['name: icm-as', 'version: {current_version}'], input_type=list]
    For further information visit https://errors.pydantic.dev/2.4/v/string_type

STDOUT:

WARNING:

Calling bumpversion without a subcommand is deprecated. Please use `bumpversion bump` instead

WARNING:

The .cfg file format is deprecated. Please use .toml instead.

Now my question: Can I get this to work with bump-my-version (and if so, how)? I couldn't find any information on how to match more than the simple version in your repo.
What I Did
Paste the command(s) you ran and the output.
If there was a crash, please include the traceback here.

[bumpversion]
current_version = 1.4.0

# note: the indent after "search" is required to signal bump2version that the pattern continues
[bumpversion:file:Chart.yaml]
search = name: icm
	version: {current_version}
replace = name: icm
	version: {new_version}

[bumpversion:file:../icm-replication/Chart.yaml]
search = name: icm
	version: {current_version}
replace = {new_version}

We were able to fix our issue with the above cfg. Hopefully this multi-line-search-pattern feature will also work with .toml.

The search and replace docs demonstrate multi-line behavior.
The issues with indenting and type-checking is one of the reasons we deprecated .cfg files. They are tricky to get right.

authors: coordt cortlepp-intershop khauser

repo: callowayproject/bump-my-version


text:
fix cannot get debugger-ui page (#395)

Fixed the problem when debugger-ui page not found.

@z4o4z Hey, forgive my absence!
This looks great! Although IMO, this approach (importing util function to every other middleware where we handle path) could be replaced with a middleware that parses path for us, like you proposed. In this case, we wouldn't need to remember to apply utility function in future middlewares.

@Krizzu Hi, I thought about the middleware but we can't change the req.path because path it is getter in the express and can't be changed. The solution to add a new key to req, but I don't know what name to use for this key(I thought about req.fiexPath). Any ideas for the key name?

parsedPath, fixedPath, cleanPath, up to you :) @z4o4z

👏 Great Job!

repo: callstack/haul


text:
InvariantViolation : requireNativeComponent RNCViewpager was not found in the UI manager

It looks like you did not run react-native link @react-native-community/viewpager ?

I do run that , But the mistake i have done before was (I DID NOT MENTION IT FIRST ) , i didn't  run yarn add @react-native-community/viewpager at first  instead i have ran the npm install --save  @react-native-community/viewpager  as i thought i have to do npm not  yarn .  After i realized and ran yarn command  followed by link command , i am getting the same error.

Is the example in this repository working for you?

No @ferrannp , I am getting error

I am also getting this error, so what is the solution ?

What about not linking / using it in iOS for now? It is not implemented on iOS anyway.

Still get the same error without linking

@SSWeedie can I see some code? You should only link it on Android but specially on JS, you should only require it for Android.

Getting the same error
Invariant Violation: Invariant Violation:
requireNativeComponent : "RNCViewPager" was not found in the UIManager".
I run both the commands

For installation
 npm install @react-native-community/viewpager

For linking the library
 react-native link @react-native-community/viewpager

System configuration :
System:
OS: Linux 4.15 Ubuntu 18.04.2 LTS
CPU: (6) x64 AMD FX(tm)-6300 Six-Core Processor
Memory: 920.17 MB / 3.59 GB
Binaries:
  Node: 8.16.0
  npm: 6.4.1
npmPackages:
  react: 16.8.3 => 16.8.3
  react-native: 0.59.5 => 0.59.5
npmGlobalPackages:
  react-native-cli: 2.0.1

Can someone post a repo where this can be reproduced?

@ferrannp Here is the complete code with the implementation steps :
For installation
npm install @react-native-community/viewpager
For linking the library
react-native link @react-native-community/viewpager
Not followed the manual steps as the react-native link @react-native-community/viewpager command does it for me.
Import view pager
import ViewPager from "@react-native-community/viewpager";
ViewPager component

First page

Second page

Add the RNCViewPagerPackage class to your list of exported packages.

@renishdeveloper that works for me. Do you have a repository I can try?

And its on Android
Same error here. I am also struggling with a similar error stating RNCWebview not found in UIManager for WebView as well for Android. Its very frustrating.

I don't know if this is useful or not, but I was also getting this issue with a fresh new project. I tried manually linking but that didn't seem to fix the problem. Again, since it was a new project I decided to delete the project and tried again. But this time adding and linking viewpager before running the app on android and creating a component making use of viewpager. It works now thankfully though I'm not fully sure why

I checked examples and work. I also tested a fresh project and  I ran below commands
mkdir toDelete
cd toDelete/
react-native init AwesomeProjectToDelete
cd AwesomeProjectToDelete/
yarn
yarn add @react-native-community/viewpager
react-native link @react-native-community/viewpager
react-native run-ios
react-native run-android

Both commands react-native run-ios and react-native run-android work with no errors.
My configuration:
  React Native Environment Info:
    System:
      OS: macOS 10.14.4
      CPU: (8) x64 Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
      Memory: 1.74 GB / 16.00 GB
      Shell: 3.2.57 - /bin/bash
    Binaries:
      Node: 11.14.0 - /usr/local/bin/node
      Yarn: 1.15.2 - /usr/local/bin/yarn
      npm: 6.9.0 - /usr/local/bin/npm
      Watchman: 4.9.0 - /usr/local/bin/watchman
    SDKs:
      iOS SDK:
        Platforms: iOS 12.2, macOS 10.14, tvOS 12.2, watchOS 5.2
    IDEs:
      Android Studio: 3.4 AI-183.5429.30.34.5452501
      Xcode: 10.2/10E125 - /usr/bin/xcodebuild
    npmPackages:
      react: 16.8.3 => 16.8.3
      react-native: 0.59.9 => 0.59.9
    npmGlobalPackages:
      react-native-cli: 2.0.1
      react-native-create-library: 3.1.2

Did you linked this lib manually or used above commands ?
@AA25
If you want to link lib manually, checkout example dir.

I've linked the react-native-viewpager using the command in Android, but it doesn't link in following file:
android/app/src/main/.../MainApplication.java
After I linked manually, it works for me.
For full manually link:
https://github.com/react-native-community/react-native-viewpager/blob/master/README.md#android

How i can use https://github.com/react-native-community/react-native-viewpager/blob/master/README.md#android
if i use expo? I have't 'android' folder

@DrobyshevAlex you cannot as this library is not supported by Expo. You would have to eject your project.
I am closing this issue as there is no reproducible repro and it is working fine for me in the example and in a new project created with `react-native init.

@ferrannp, I have installed "yarn add @react-native-community/viewpager" and then follow the steps but It not run in expo.

@DrobyshevAlex you cannot as this library is not supported by Expo. You would have to eject your project.

The interesting thing is that Expo people recommend using the react-native-viewpager instead of one of their deprecated interface. It is literally the first-line link on the ViewPagerAndroid page.

I am on RN 61.5 with "@react-native-community/viewpager": "^3.1.0" and got crashes on iOS (not Android) with the said error.
What helped was manually linking the dependancy for iOS:
put
  pod 'react-native-viewpager', :path => '../node_modules/@react-native-community/viewpager'

in your Podfile and run cd ios && pod install

I had the same issue using react-native 0.61.4 and "@react-native-community/viewpager": "^3.3.0" on android. It  was resolved after doing react-native link @react-native-community/viewpager. Why do i have to link it when react native uses auto linking ?

i have used library react-native-scrollable-tab-view version 1.0.0, it has dependency @react-native-community/viewpager then error ocurce. But when i downgrade to version 0.10.0 this error is gone.

if you're using expo and you have this issue make sure you're on sdk-37 and see this docs page for installation instructions https://docs.expo.io/versions/latest/sdk/view-pager/

@yzalvov - we only release sdks once per quarter, so all you need is for someone to make a change in one of the react-native-community repos one day after that release and then there is nothing we can do until the next release. so that is why you would have seen different recommendations in the docs. w

I checked, if autolinking issue exist and I can't reproduce it. You check it on my branch here:
https://github.com/troZee/viewPagerExample/tree/autolinking

I checked and autolinking for 0.62 here:
https://github.com/troZee/viewPagerExample/tree/autolinking
And everything works fine.

i had same issue, is it maybe the problem is only for expokit app (eject from manage workflow).
Because my apps didnt get any autolinking, include viewpager

Getting the same error
Invariant Violation: Invariant Violation:
requireNativeComponent : "RNCViewPager" was not found in the UIManager".
I run both the commands
1. ```
   For installation
    npm install @react-native-community/viewpager
   ```

2. ```
   For linking the library
    react-native link @react-native-community/viewpager
   ```

System configuration :
System:
OS: Linux 4.15 Ubuntu 18.04.2 LTS
CPU: (6) x64 AMD FX(tm)-6300 Six-Core Processor
Memory: 920.17 MB / 3.59 GB
Binaries:
  Node: 8.16.0
  npm: 6.4.1
npmPackages:
  react: 16.8.3 => 16.8.3
  react-native: 0.59.5 => 0.59.5
npmGlobalPackages:
  react-native-cli: 2.0.1

saved my time :) thanks a million

i had same issue, is it maybe the problem is only for expokit app (eject from manage workflow).
Because my apps didnt get any autolinking, include viewpager

It might be related to this issue. https://github.com/expo/expo-cli/issues/1398

To make it work on ios I had to do react-native link react-native-pager-view then cd ios; pod install; cd ..

authors: AA25 AppUU DanielVenturini DatNguyenWoft DrobyshevAlex Niz47 SSWeedie aryojamousi brambang brentvatne ferrannp jaythakkar2807 narek11 ptrocki renishdeveloper sangyakhare sharief-edv sushrut-desora troZee yzalvov

repo: callstack/react-native-pager-view


text:
A Question in Densenet

It confuses me that there is no parameters in all denseblocks. Is there any problem in the program?

Hello!
I'm using DenseNet right now, too.
It seems that the author didn't follow the coding convention suggested by Tensorflow Team?
For example, people who write a layer inherited from tf.keras.layers.Layer should contain get_config function or some problems may happen.
To answer your question, I found that one should not declare new layers inside the call function in the custom layer inherited from tf.keras.layers.Layer.
It may be the problem that makes the DenseBlock empty.
To solve this, I've changed the code like below:
class DenseBlock(tf.keras.layers.Layer):
    def __init__(self, num_layers, growth_rate, drop_rate, name=None):
        super(DenseBlock, self).__init__(name=name)
        self.num_layers = num_layers
        self.growth_rate = growth_rate
        self.drop_rate = drop_rate
        self.features_list = []
        self.model_list = []
        for i in range(0, self.num_layers):
            tmp = BottleNeck(growth_rate=self.growth_rate, drop_rate=self.drop_rate)
            self.model_list.append(tmp)

    # def _make_layer(self, x, training):
    #     y = BottleNeck(growth_rate=self.growth_rate, drop_rate=self.drop_rate)(x, training=training)
    #     self.features_list.append(y)
    #     y = tf.concat(self.features_list, axis=-1)
    #     return y

    def call(self, inputs, training=None, **kwargs):
        self.features_list.append(inputs)
        x = inputs
        # x = self._make_layer(inputs, training=training)
        for i in range(0, self.num_layers):
            # x = self._make_layer(x, training=training)
            x = self.model_list[i](x, training=training)
            self.features_list.append(x)
            x = tf.concat(self.features_list, axis=-1)
        self.features_list.clear()
        return x

    def get_config(self):
        config = super(DenseBlock, self).get_config()
        config.update({'growth_rate': self.growth_rate,
                       'drop_rate': self.drop_rate,
                       'num_layers': self.num_layers})
        return config

Then the problem should be gone.

@taffy128s
Thank you to answer my question.
I made almostly the same thing as you. The BottleNeck should be initialized before we use it in call function, or not we will see zero parameter in  denseblock.
class DenseBlock(tf.keras.layers.Layer):
    def __init__(self, num_layers, growth_rate, drop_rate):
        super(DenseBlock, self).__init__()
        self.num_layers = num_layers
        self.growth_rate = growth_rate
        self.drop_rate = drop_rate
        self.features_list = []
        self.BottleNeck = {}
        for i in range(self.num_layers):
            self.BottleNeck[str(i)] = BottleNeck(growth_rate=self.growth_rate, drop_rate=self.drop_rate)

    def call(self, inputs, training=None, **kwargs):
        self.features_list.append(inputs)
        x = self.BottleNeck[str(0)](inputs, training=training)
        self.features_list.append(x)
        x = tf.concat(self.features_list, axis=-1)
        for i in range(1, self.num_layers):
            x = self.BottleNeck[str(i)](inputs, training=training)
            self.features_list.append(x)
            x = tf.concat(self.features_list, axis=-1)
        self.features_list.clear()
        return x


text:
Added joinIx, mapIx, setIx, and skipIx

See #70

Codecov Report

Merging #181 into master will increase coverage by <.01%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #181      +/-   ##
==========================================
+ Coverage   99.83%   99.83%   +<.01%
==========================================
  Files           1        1
  Lines        1205     1223      +18
==========================================
+ Hits         1203     1221      +18
  Misses          2        2

Impacted Files
Coverage Δ

dist/partial.lenses.cjs.js
99.83% <0%> (ø)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 45a7d1e...d9d35d5. Read the comment docs.

authors: codecov-io polytypic

license: mit


text:
[BUG] regexp_instr does not validate regex in PostgreSQL

Is this a new bug in dbt-expectations?

[X] I believe this is a new bug in dbt-expectations
[X] I have searched the existing issues, and I could not find an existing issue for this bug

Current Behavior
Any call to the regexp_instr macro will be valid for PostgreSQL. This is due to the generated expression and the handling of nulls by Postgres.
Dissecting the generated expression:
  with grouped_expression as (
    select array_length(
        (
          select regexp_matches(postal_code_5_3, '^\d{5}-\d{3}', '')
        ),
        1
      ) > 0 as expression
    from <db_name>.dbt_expectations_integration_tests.data_text
  ),

  validation_errors as (
    select *
    from grouped_expression
    where not(expression = true)
  )

  select *
  from validation_errors

select regexp_matches('<valid_source>', '<valid_regex>', '<any_flags>') will always return either no results or a text[].
Getting the array_length of that will either be null or >0
Comparing that to 0 will return null or true respectively
Comparing that to true will once again return null or true respectively
Negating that will return null or false which have the same full filter effect in a where clause

Expected Behavior
regexp_instr should fail when regex doesn't match.
Steps To Reproduce
Change any regex in "dbt-expectations/integration_tests/models/schema_tests/schema.yml" with anything else (e.g. replace the '^\d{5}-\d{3}' regex with 'definitely_not_a_valid_postal_code') , the tests will still succeed.
Environment
- OS: Manjaro Linux 22.0.2
- Python: 3.10.9
- dbt: 1.4.5
- dbt-expectations: 0.8.3

Which database adapter are you using with dbt?
Postgres
Suggested fix
Fix with the widest Postgres version compatibility range would probably be to coalesce the array_length
i.e. to replace
array_length((select regexp_matches({{ source_value }}, '{{ regexp }}', '{{ flags }}')), 1)
with
coalesce(array_length((select regexp_matches({{ source_value }}, '{{ regexp }}', '{{ flags }}')), 1), 0)
in "dbt-expectations/macros/regex/regexp_instr.sql"

Closed via #250

authors: clausherther lookslikeitsnot

repo: calogica/dbt-expectations


text:
[Optional] validate Payment procedure in 2-STEP

Problem description
There can be the business scenario of 2-STEP payment where a specific payment needs to be validated.
In TEF we have this scenario in ES and DE Telcos so far.
It is also understood this situation cannot (be) exists in other Telcos/countries, so we propose a way to have this feature as an optional one, so it does not compromise/impose additional logic to a Telco/Country that does not use/require it.
Possible evolution
Proposal is the following:
Some Basis for the proposal:

Not needed in 1-STEP.

In this way, we can also remove validationURL from 1-STEP.

Only used in 2-STEP Payment when the validation information is provided. So optional due to Business Requirements
In preparePayment response, define new param “validationInfo” (name open, maybe be also for instance otpValidation or paymentValidation), with two variants:

action: open

validationURL -> indicates a public URL where the OTP can be input and validated. This is a Backend generated URL so no customizable by the merchant

action: validate

authorizationId -> the identifier for this payment authorization -> This is the case where merchant builds the UI related to the paymentValidation so an endpoint is needed for the merchant to invoke the validation

NEW validatePayment endpoint which would have as inputs:
o	code: OTP received out-of-band
o	authorizationId, as provided by API en preparePayment
Then validatePayment would look something like on this style:
Request

Response

Additional Points:
confirmPayment we would need and extra Exception for the case the payment is not validated yet

paymentId is not validated yet ("code": "CARRIER_BILLING.PAYMENT_NOT_VALIDATED","message": "Payment has not been validated").

Probably we may need an extra state "waiting for confirmation" (name in API TBD) to cover with this optional process
Some initial input

•	If preparePayment is SYNC and no validationInfo is present -> state is “reserved”
•	If preparePayment is SYNC and validationInfo is present -> state is “waiting for validation” -> when validated it transitions to “reserved”
•	If preparePayment is ASYNC and no validationInfo is present -> status is “processing” -> when process ends it transitions to “reserved”
•	If preparePayment is ASYNC and validationInfo is present -> state is “waiting for validation” -> when validated it transitions to “reserved”
Additional context
N/A

Please @bigludo7, @rartych, @mohamedsaeedstc take a look to it, in order for the next meeting, any initial doubt/comment is welcome

@PedroDiez
The state update seems to be correct but probably good for our next meeting to have an updated version of https://github.com/camaraproject/CarrierBillingCheckOut/blob/main/documentation/API_documentation/resources/Carrier_Billing_State_Engine.JPG to be shown (source here: https://github.com/camaraproject/CarrierBillingCheckOut/blob/main/documentation/API_documentation/resources/Carrier Billing lifecycle source.puml). That will be easier to validate - WDYT?

Hi @bigludo7,
Yes, i will try to provide and updated version on Monday EoB

Will generate image tomorrow:
1. Regarding Transactions (also considering the topic indicated in Issue#116).
For the analysis here, "waiting for validation" will be named as "pending_validation"
Will draft image tomorrow (within Issue#116)
1-STEP

If createPayment is SYNC process in BE. Response contains PaymentId and status=succeeded
If create Payment is ASYNC process in BE. Response contains PaymentId and status=processing. After completion:

If payment is OK then status=succeeded.
If payment is NOK (any reason) then status=denied

2-STEP (validation is optional depending Business Scenario)
FIRST STEP

If preparePayment is SYNC process in BE.

And no validationInfo is present in response.  Response contains PaymentId and status=reserved
And validationInfo is present in response.  Response contains PaymentId and status=pending_validation

If preparePayment is ASYNC process in BE

And no validationInfo is present in response.  Response contains PaymentId and status=processing

After preparePayment Completion status=reserved OR denied

And validationInfo is present in response.  Response contains PaymentId and status=processing

After preparePayment Completion status=pending_validation OR denied

VALIDATE (OPTIONAL)

After validatePayment status=reserved

SECOND STEP

After confirmPayment -> status= succeeded OR denied
After cancelPayment -> status = cancelled.

Source Code:
`@startuml Payment lifecycle
state fork <>
state choice <>
state end <>
[*] --> choice
note left of choice: Business response is provided\nsynchronously or asynchronously
choice --> Processing : Async
Processing: Payment request\nis initialised
choice --> fork : Sync
Processing --> fork
note right of fork: Distinction between 1 step (1S)\nor 2 steps (2S) payment
fork: separation between one or stwo steps payment
fork -right-> Succeeded : (1S) Payment\nsuccessfully executed
fork -left-> Denied : (1S)/(2S) Payment request\ndenied by carrier
fork --> Pending_Validation : (2S) [Optional] Payment\n validation required
fork --> Reserved : (2S) Payment reserved\nsuccessfully executed
Pending_Validation -> Reserved: (2S) Payment validated
Pending_Validation -> Denied: (2S) Payment not validated
Reserved -down-> Cancelled : (2S) Request to cancel payment\nsuccessfully executed\nor payment reservation expired
Reserved -right-> Succeeded : (2S) Payment confirmation\nsuccessfully executed
Reserved -left-> Denied : (2S) Confirmation request\ndenied by carrier
Succeeded --> []
Cancelled --> []
Denied -up-> end
Pending_Validation: Perform payment validation
Reserved: Payment is prepared &\nready to be confirmed.\nAmount is reserved
Denied: Payment request is denied\nby back-end payment server
Succeeded: Amount has been charged\non customer line
Cancelled: Payment is cancelled\nAmount is released
@enduml`

@bigludo7 full analysis done

Let's check tomorrow this comment:
• (1STEP/2STEP) should be added in all transitions (missing on the first 2).

Commented during meeting 21/NOV and aligned to be considered in the next PR.
A prior PR will be handled to update "Payment Lifecycle" diagram

Source Code: (Updated)
`@startuml Payment lifecycle
state fork <>
state choice <>
state end <>
[*] --> choice
note left of choice: Business response is provided\nsynchronously or asynchronously
choice --> Processing : (1S)/(2S) Async
Processing: Payment request\nis initialised
choice --> fork : (1S)/(2S) Sync
Processing --> fork
note right of fork: Distinction between 1 step (1S)\nor 2 steps (2S) payment
fork: separation between one or stwo steps payment
fork -right-> Succeeded : (1S) Payment\nsuccessfully executed
fork -left-> Denied : (1S)/(2S) Payment request\ndenied by carrier
fork --> Pending_Validation : (2S) [Optional] Payment\n validation required
fork --> Reserved : (2S) Payment reserved\nsuccessfully executed
Pending_Validation -> Reserved: (2S) Payment validated
Pending_Validation -> Denied: (2S) Payment not validated
Reserved -down-> Cancelled : (2S) Request to cancel payment\nsuccessfully executed\nor payment reservation expired
Reserved -right-> Succeeded : (2S) Payment confirmation\nsuccessfully executed
Reserved -left-> Denied : (2S) Confirmation request\ndenied by carrier
Succeeded --> []
Cancelled --> []
Denied -up-> end
Pending_Validation: Perform payment validation
Reserved: Payment is prepared &\nready to be confirmed.\nAmount is reserved
Denied: Payment request is denied\nby back-end payment server
Succeeded: Amount has been charged\non customer line
Cancelled: Payment is cancelled\nAmount is released
@enduml`

Sequence Updated:

Works for me. Thanks !

repo: camaraproject/CarrierBillingCheckOut


text:
how do you deal with the ocean data to json?

I wanna to know how to deal with the ocean data that download from OSCAR.I wanna to know it detailed.please tell me,thanks.

hello?did you find the answer of the problem?

I have the same question,any help will be greatly appreciated.

repo: cambecc/earth


text:
Allow to set breakpoints

support a single Route and a single context for now
test will need to be improved to be robust
only Java DSL tested

failur eon Ubunutu is not specific to this PR. Main branch is broken too today https://github.com/camel-tooling/camel-debug-adapter/runs/4805368206?check_suite_focus=true so somethign changed on github actions side... but what?

repo: camel-tooling/camel-debug-adapter


text:
deps: update to bpmn-js-element-templates@1.9.2

Would be cool to get this into the 5.18 release

Thanks, I changed the Changelog and will go ahead and release 🚀

repo: camunda/camunda-bpmn-js


text:
Refactoring

Converted the old style var js variables into the newer const and let variables.
This should reduce the chance of bugs due to variable hoisting.
const is used when the value shouldn't change after it's intially set, and let is for the opposite case.
Converted the magic number Score Type to be a ScoreType enum so it's easier to understand what the value is throughout the code.
Made some changes so variables are defined closer to where they are used in the application, I'm not sure if this is as common in javascript/typescript as it is in .Net, I'm willing to move them back to the top of the block if needed.

I want to wait on #47 to be merged before merging this.

repo: canada-ca/aia-eia-js


text:
Linker sequence should allow lowercase

Possibly other changes to make as well

revisit linker sequence guidelines more broadly

Update: We will allow a-z

authors: jsstevenson korikuzma

repo: cancervariants/fusor


text:
🛑 Hacker News is down

In f263d23, Hacker News (https://news.ycombinator.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Hacker News is back up in 68f7e0a after 22 minutes.

repo: cannavit/status-pages-monitoring


text:
🛑 Ubuntu.com tutorials is down

In 4fcba7d, Ubuntu.com tutorials (https://ubuntu.com/tutorials) was down:

HTTP code: 500
Response time: 6463 ms

Resolved: Ubuntu.com tutorials is back up in 7b1ebce.

repo: canonical-web-and-design/upptime


text:
🛑 certification.ubuntu.com is down

In 42947a1, certification.ubuntu.com (https://certification.ubuntu.com) was down:

HTTP code: 503
Response time: 549 ms

Resolved: certification.ubuntu.com is back up in e11db53.


text:
🛑 Ubuntu.com appliance page is down

In 5990976, Ubuntu.com appliance page (https://ubuntu.com/appliance/openhab) was down:

HTTP code: 503
Response time: 75 ms

Resolved: Ubuntu.com appliance page is back up in 5a32a2b.


text:
Nodes crashed. Kubelet keeps restarting. node.kubernetes.io/unreachable:NoSchedule taint

Summary
Ubuntu 20.04.5 LTS
microk8s 1.26.1 installed via snap
3 nodes HA clusters
I came back one morning and my cluster that was working fine the previous day was completely down. Unlike my previous similar experience, this time the disks still have space remaining.
microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.

At this point microk8s inspect would just freeze at the Gathering system information step after printing that the services were running.
I then launched a microk8s start, nothing for a few minutes, then exit with no message. status still say not running.
I tried to check the logs using sudo journalctl -u snap.microk8s.daemon-kubelite but there’s too much stuff, couldn’t find anything relevant.
I then rebooted the nodes sudo reboot and they actually came back online status Ready.
The condition look good:
    Conditions:
    Type Status LastHeartbeatTime LastTransitionTime Reason Message

    NetworkUnavailable False Thu, 23 Feb 2023 04:36:12 +0000 Thu, 23 Feb 2023 04:36:12 +0000 CalicoIsUp Calico is running on this node
    MemoryPressure False Mon, 20 Mar 2023 20:38:48 +0000 Mon, 20 Mar 2023 20:10:26 +0000 KubeletHasSufficientMemory kubelet has sufficient memory available
    DiskPressure False Mon, 20 Mar 2023 20:38:48 +0000 Mon, 20 Mar 2023 20:10:26 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure
    PIDPressure False Mon, 20 Mar 2023 20:38:48 +0000 Mon, 20 Mar 2023 20:10:26 +0000 KubeletHasSufficientPID kubelet has sufficient PID available
    Ready True Mon, 20 Mar 2023 20:38:48 +0000 Mon, 20 Mar 2023 20:10:26 +0000 KubeletReady kubelet is posting ready status. AppArmor enabled

But there is a Taint preventing any workload to get scheduled on them:
    Taints: http://node.kubernetes.io/unreachable:NoSchedule

Events on pods:
    0/3 nodes are available: 3 node(s) had untolerated taint {http://node.kubernetes.io/unreachable: }. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling…

Events seems to crash the kubelet service on loop:
    Warning InvalidDiskCapacity 9m38s kubelet invalid capacity 0 on image filesystem
    Normal NodeHasSufficientPID 9m38s kubelet Node jldocker-1 status is now: NodeHasSufficientPID
    Normal NodeAllocatableEnforced 9m38s kubelet Updated Node Allocatable limit across pods
    Normal NodeHasNoDiskPressure 9m38s kubelet Node jldocker-1 status is now: NodeHasNoDiskPressure
    Normal NodeHasSufficientMemory 9m38s kubelet Node jldocker-1 status is now: NodeHasSufficientMemory
    Normal Starting 9m38s kubelet Starting kubelet.
    Normal Starting 7m7s kubelet Starting kubelet.
    Warning InvalidDiskCapacity 7m7s kubelet invalid capacity 0 on image filesystem
    Normal NodeHasNoDiskPressure 7m6s kubelet Node jldocker-1 status is now: NodeHasNoDiskPressure
    Normal NodeAllocatableEnforced 7m6s kubelet Updated Node Allocatable limit across pods
    Normal NodeHasSufficientPID 7m6s kubelet Node jldocker-1 status is now: NodeHasSufficientPID
    Normal NodeHasSufficientMemory 7m6s kubelet Node jldocker-1 status is now: NodeHasSufficientMemory
    Normal Starting 2m57s kubelet Starting kubelet.
    Warning InvalidDiskCapacity 2m57s kubelet invalid capacity 0 on image filesystem
    Normal NodeHasSufficientMemory 2m57s kubelet Node jldocker-1 status is now: NodeHasSufficientMemory
    Normal NodeHasNoDiskPressure 2m57s kubelet Node jldocker-1 status is now: NodeHasNoDiskPressure
    Normal NodeHasSufficientPID 2m57s kubelet Node jldocker-1 status is now: NodeHasSufficientPID
    Normal NodeAllocatableEnforced 2m57s kubelet Updated Node Allocatable limit across pods

The "Invalid Disk Capacity" part seems to be normal, because the pods handling the disk CSI (Longhorn) are not running because of the node taint.
Any command I send to microk8s kubectl print some error message about memcache.go:
    E0320 20:41:19.730002 50241 memcache.go:255] couldn’t get resource list for http://metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    E0320 20:41:19.733484 50241 memcache.go:106] couldn’t get resource list for http://metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    E0320 20:41:19.735017 50241 memcache.go:106] couldn’t get resource list for http://metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    E0320 20:41:19.738322 50241 memcache.go:106] couldn’t get resource list for http://metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    E0320 20:41:20.827654 50241 memcache.go:106] couldn’t get resource list for http://metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    E0320 20:41:20.830214 50241 memcache.go:106] couldn’t get resource list for http://metrics.k8s.io/v1beta1: the server is currently unable to handle the request

Any idea what is causing this? From my point of view, nodes seems healthy, ram, cpu and disk are good, networking between them is also functional.
Introspection Report
Here is my microk8s inspect tarball file hosted on my Google Drive:
https://drive.google.com/file/d/1LEaCI3O2Y82OI4Q2quo-uIBD-zV8rZBA/view?usp=sharing

Small follow up,
I did a microk8s stop on all 3 nodes because they were just crash looping wit errors all the time. A few hours later I came back and tried to pop just the first node back up, and it doesn't come up.
$ microk8s status
microk8s is not running, try microk8s start
$ microk8s start
********************************** about 2-3 minutes before it respond **********************************
$ microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.
$ microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.
$ microk8s inspect
Inspecting system
Inspecting Certificates
Inspecting services
  Service snap.microk8s.daemon-cluster-agent is running
  Service snap.microk8s.daemon-containerd is running
  Service snap.microk8s.daemon-kubelite is running
  Service snap.microk8s.daemon-k8s-dqlite is running
  Service snap.microk8s.daemon-apiserver-kicker is running
  Copy service arguments to the final report tarball
Inspecting AppArmor configuration
Gathering system information
  Copy processes list to the final report tarball
  Copy disk usage information to the final report tarball
  Copy memory usage information to the final report tarball
  Copy server uptime to the final report tarball
  Copy openSSL information to the final report tarball
  Copy snap list to the final report tarball
  Copy VM name (or none) to the final report tarball
  Copy current linux distribution to the final report tarball
  Copy network configuration to the final report tarball
Inspecting kubernetes cluster
  Inspect kubernetes cluster
**********************************  about 5 minutes before it respond **********************************
Inspecting dqlite
  Inspect dqlite

Building the report tarball
  Report tarball is at /var/snap/microk8s/4595/inspection-report-20230321_033014.tar.gz
$ microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.
$ microk8s kubectl get nodes
E0321 03:32:43.569188  861346 memcache.go:238] couldn't get current server API group list: Get "https://127.0.0.1:16443/api?timeout=32s": net/http: TLS handshake timeout
E0321 03:33:03.576104  861346 memcache.go:238] couldn't get current server API group list: Get "https://127.0.0.1:16443/api?timeout=32s": net/http: TLS handshake timeout - error from a previous attempt: read tcp 127.0.0.1:47630->127.0.0.1:16443: read: connection reset by peer
E0321 03:33:24.569670  861346 memcache.go:238] couldn't get current server API group list: Get "https://127.0.0.1:16443/api?timeout=32s": net/http: TLS handshake timeout - error from a previous attempt: read tcp 127.0.0.1:50388->127.0.0.1:16443: read: connection reset by peer
E0321 03:33:34.571132  861346 memcache.go:238] couldn't get current server API group list: Get "https://127.0.0.1:16443/api?timeout=32s": net/http: TLS handshake timeout
E0321 03:33:45.981150  861346 memcache.go:238] couldn't get current server API group list: Get "https://127.0.0.1:16443/api?timeout=32s": net/http: TLS handshake timeout - error from a previous attempt: read tcp 127.0.0.1:54130->127.0.0.1:16443: read: connection reset by peer
error: Get "https://127.0.0.1:16443/api?timeout=32s": net/http: TLS handshake timeout - error from a previous attempt: read tcp 127.0.0.1:54130->127.0.0.1:16443: read: connection reset by peer

I uploaded the new (much smaller) tarball here: https://drive.google.com/file/d/1AEA23MpRMeCeHkfFlh7t_jMOKLXkj4Mf/view?usp=sharing
Might be easier to diagnose
I see a lot of this error in the kubelite log, not sure what it could mean:
microk8s.daemon-kubelite[854750]: W0321 03:24:11.013071  854750 logging.go:59] [core] [Channel #3 SubChannel #4] grpc: addrConn.createTransport failed to connect to {
microk8s.daemon-kubelite[854750]:   "Addr": "unix:///var/snap/microk8s/4595/var/kubernetes/backend/kine.sock:12379",
microk8s.daemon-kubelite[854750]:   "ServerName": "kine.sock",
microk8s.daemon-kubelite[854750]:   "Attributes": null,
microk8s.daemon-kubelite[854750]:   "BalancerAttributes": null,
microk8s.daemon-kubelite[854750]:   "Type": 0,
microk8s.daemon-kubelite[854750]:   "Metadata": null
microk8s.daemon-kubelite[854750]: }. Err: connection error: desc = "transport: Error while dialing dial unix /var/snap/microk8s/4595/var/kubernetes/backend/kine.sock:12379: connect: connection refused"

I realized it's normal a one node system doesn't work (no quorum). As soon as I restarted node2 it reports "running" again. But still have the taint and the memcache.go errors.
Weird thing, even node3 is reported as "Ready" when microk8s is still stopped on it!
Look extremely similar to #3204 and #3735 except I don't quite understand the conclusion other than "I'm moving to another system".

From what I understand, the main issue is the kubelite processes restarting every few minutes. Looking at the logs, it seems to be related to leader election. Why would the cluster spend its time trying to elect a different leader and loop around that?
This is the relevant part of the log that seems to happen often. Something about a timeout updating a lock?
microk8s.daemon-kubelite[53319]: E0320 20:46:08.223079   53319 leaderelection.go:367] Failed to update lock: Put "https://127.0.0.1:16443/apis/coordination.k8s.io/v1/namespaces/kube-system/leases/kube-controller-manager?timeout=15s": context deadline exceeded
microk8s.daemon-kubelite[53319]: I0320 20:46:08.223143   53319 leaderelection.go:283] failed to renew lease kube-system/kube-controller-manager: timed out waiting for the condition
microk8s.daemon-kubelite[53319]: E0320 20:46:08.223210   53319 controllermanager.go:294] "leaderelection lost"
systemd[1]: snap.microk8s.daemon-kubelite.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: snap.microk8s.daemon-kubelite.service: Failed with result 'exit-code'.
systemd[1]: snap.microk8s.daemon-kubelite.service: Scheduled restart job, restart counter is at 10.
systemd[1]: Stopped Service for snap application microk8s.daemon-kubelite.
systemd[1]: Started Service for snap application microk8s.daemon-kubelite.

@MathieuBordere I see you helped a few similar situations in the past, any thoughts?

Being absolutely out of ideas I tried to turn the cluster back to a real single node with no HA:

cordon / drain nodes 1 & 3, lot of errors of pods that can't be shutdown, anyway.
microk8s leave and microk8s stop on nodes 1 & 3 (the 2nd was the one it say had the last datastore so I left this one as the main).
Made sure /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml of node2 has only one entry
kubectl delete node on 1 & 3 because they remained in the list of resources

At this point, microk8s status on node 2 say it is alone, and with HA.
And yet, nothing work! So my problem is not because of the HA cluster?
kubelite actually stopped crash looping, but it didn't resolve anything. But I can't manipulate any resource in the cluster, everything is like frozen. Pods are stuck either creating or terminating and nothing I do change their status (even those in kube-system). Every commands are extremely slow to respond and most timeout. There's no events. I tried to delete pods in longhorn-system and kube-system with --force to see if they would respawn, but nope they just remains there, even worse some are still reporting as running on nodes that doesn't exist anymore.
Maybe a little late, but I then realized k8s-dqlite use 100% CPU:
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1586219 root      20   0 2552.0m 974.7m  18.8m S 105.9  16.4   1:58.30 /snap/microk8s/4595/bin/k8s-dqlite --storage-dir=/var/snap/microk8s/4595/var/kubernetes/backend/ --listen=unix:///var/snap/microk8s/4595/var/kubernetes/backend/kine.sock:12379

Is that because the dqlite database is corrupted?
I tried to stop, run the "reconfigure" command from this article, and restart: https://microk8s.io/docs/restore-quorum
Didn't change anything
PLEASE HELP!

@Dunge after turning the cluster into a single node, do you see if k8s-dqlite is crash looping? This process is not a pod, but a systemd though.
Curious to know what are running in the cluster before it went down?

No, k8s-dqlite is/was using 100% cpu, but not crash looping. What was crash looping was kubelite.
I'm currently in the process of trying to re-attach the nodes (Recover from lost quorum) article. I copied the files, and trying to issue the add-node/join commands now, but it takes like 10 minutes to respond. I guess I'll go with a microk8s reset soon and start from scratch, hoping my Longhorn data survive.
My cluster have as I mentioned, Longhorn as the volume CSI, and in the default namespace I have a rabbitmq cluster, a redis cluster (both from bitnami Helm charts), a sftp server, a nuget server (liget), and 11 of my own dotnet services, none doing anything really special.

I normally do a sudo snap remove microk8s --purge followed by sudo snap install microk8s... instead of microk8s reset.  The reset requires a running kubernetes as it interacts with the api server.
I am trying to understand what could be the reason the cluster went south.
Does the node have enough memory/cpu to run your workloads plus microk8s?

Thank, I'll do that.
All three nodes had more than enough, and it ran fine for about 3 months.
A single node does not have enough RAM for everything, but the workload didn't even start when it was single anyway (could not mount volumes since longhorn and coredns was also down).
But since this was a long term stability test to determine if the solution was stable enough for production, the result is obviously failed.

Yeah something is really wrong with my node2, I'm not even able to install it anymore!
I did a sudo snap remove microk8s --purge on all three no problem, then installed it back sucessfully on 1&3. But node2 (which is currentl a 0% cpu usage, 6GB free memory and ton of free disk space, along with practically no other application installed or running on that linux vm, it's practically empty):
sudo snap install microk8s --classic --channel=1.26
error: cannot perform the following tasks:
- Start snap "microk8s" (4595) services (systemctl command [start snap.microk8s.daemon-containerd.service] failed with exit status 1: Job for snap.microk8s.daemon-containerd.service failed because a timeout was exceeded.
See "systemctl status snap.microk8s.daemon-containerd.service" and "journalctl -xeu snap.microk8s.daemon-containerd.service" for details.
)

what the hell? And of course the snap.microk8s.daemon-containerd.service log only say Failed with result 'timeout'.

All seems to now be related to a coredns issue.
I tried to follow this guide to diagnose: https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/
From some pod, contacting services works properly, from other it doesn't. Doesn't matter what node they run on. nslookup will timeout on some, while work on other. /etc/resolv.conf point correctly to the IP of the core-dns service on all of them. But from some pods the request doesn't end up in the core-dns pod (as seen by enabling logs on the core-dns configmap). I can ping the pod directly.
I tried to disable and re-enable the dns plugin, it didn't help.
From the guide above, the only difference I see is that the "node get" permission isn't in the core-dns clusterrole, but that's filled in by microk8s, I doubt this is an issue.
Really stumped again, I don't know how I manage to get myself in these situation, this should "just work", but it doesn't.

Is it worth to look at the difference between node 1 and 3 system? Knowing that both 1 & 3 are working.
The fact that it requires you to install microk8s on node2 several times isn't a good sign.

Yeah I know, that bothers me too. They are all hosted at the same place (VMs under a vmware hypervisor), same specs, same os, same cpu/ram/disk usage, same softwares installed, same network. I did network and storage benchmarks and they are the same, I don't see anything strange in the syslogs. I really can't understand why microk8s refused to install with timeouts after being purged when the system was practically idle. They are bot potatoes, should have power enough for that.
In any case, after installation, recreating a HA cluster went fine, and never saw the dqlite cpu issue again.
Recap:

My previously stable cluster went south for no reason while being near idle and dropped all workload. Pods were stuck creating or deleting, half of the kubeclt and microk8s commands failed with all kind of different timeouts errors.
Unable to recuperate, I tried to transform it as a single node. Ending up with dqlite using 100% cpu and still the same errors.
Purged everything, and reinstalled from scratch. One node had incomprehensible issue installing the snap package.
Now all running, my coredns service doesn't seem to work properly. Half of the pods get no response when querying service via their host service.namespace.svc.cluster.local and I can't understand why.

@Dunge do you need an HA cluster?  Just in case you do not need, one can join using --worker args during join.
Without knowing what is bothering node2, i am afraid it may blow up the cluster again.  Lets see.

Yes, the whole sale pitch why we spent so much development effort moving to dockers and k8s is stability and resilience, along with providing easy zero downtime updates. Splitting the work load on multiple machines is secondary. Our application don't have that much processing to do or concurrent requests to process, but just can't afford to go down.
Our main server is cloud hosted, so no problem there. But we still have a few customers who require an airgapped system not exposed on internet and local data. So with microk8s, the goal was for them just to provide a few Linux machines, and we would handle installation and management.
The current cluster is our dev/staging environment so is not critical, and was used as a test if microk8s was stable enough to use on customers networks. But with the results here of kubelite crashing and dqlite cpu hog issue, I'm not confident at all.
It's pretty certain it's due to the host vm itself, but unless I have a way to proves it is flawed in some way, I can't confirm that.
And now, I still have the coredns issue to fix, which I don't even know how to start. I have to get my staging environment back on track.

have exact same issues, for no reason that I can tell, my 3 node cluster toppled over, same issues with dqlite cpu usage, kube api is barely responsive, dropping connections, not finishing responses, etc... upgraded microk8s from 1.24 to 1.25 with no observable change, still battling this

@alexgorbatchev glad to see I'm not alone. My experience was filled with multiple different symptoms it's hard to pinpoint if it's all related or not, but based on your comment it seems very similar.
Personally, after restarting it all from scratch and having that new dns issue mentioned above (on a practically empty cluster), I gave up and let it rest as is while I concentrated my efforts on building my AWS EKS cluster (which works perfectly btw). When I came back 2 weeks later I saw that it was still broke for the first week, and then suddenly repaired itself with absolutely no manual intervention and every pods were running with no errors for the second week. So I reinstalled my own services pods, and it is still running up to this day.
I absolutely cannot tell what caused it to

Unfortunately, the problem never got away.
I feel it is overloaded with different symptoms of different problems and is hard to maintain a clear idea. I believe it would be better if I open a new more concise one.
My previous "dns not responding" issue was just the iptables reseting on one node after a reboot, not the main problem I'm having.
Currently on mikrok8s 1.27.1, longhorn 1.4.1.
Two principal symptoms:
Readiness probes failing for random services (even kube-system ones) maybe once every 6 hours, comes back okay straight afterward.
One random node become NodeStatusUnknown about once per week and come back a minute of two later, but cause a lot of pods to try to terminate and migrate and cause the disks replica to move and it end up disrupting the services.
Absolutely no log in any pod or in the microk8s kubelite process before the event. I have tons of Grafana dashboards, including node process exporters and kubernetes events, and I don't see any spikes or anything else weird. The only changes there is is one minute AFTER the event, when it tries to come back.
What are the possible reason microk8s would mark a node as NodeStatusUnknown?

closed in favor of a new more precise issue

authors: Dunge alexgorbatchev balchua


text:
[LOW IMPORTANCE][STABILITY] KeyError: 'node.roles'

I've seen this error a few times on local runs, so I add this ticket to signify - in case it may occur to others or on pipelines pls add more info to the ticket.
The following exception has been raised a couple of times:
unit-opensearch-1: 11:00:28 ERROR unit.opensearch/1.juju-log Uncaught exception while in charm code:
Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-opensearch-1/charm/lib/charms/opensearch/v0/opensearch_distro.py", line 408, in current
    nodes = self.request("GET", f"/_nodes/{self.node_id}", alt_hosts=self._charm.alt_hosts)
  File "/usr/lib/python3.10/functools.py", line 981, in __get__
    val = self.func(instance)
  File "/var/lib/juju/agents/unit-opensearch-1/charm/lib/charms/opensearch/v0/opensearch_distro.py", line 375, in node_id
    nodes = self.request("GET", "/_nodes").get("nodes")
  File "/var/lib/juju/agents/unit-opensearch-1/charm/lib/charms/opensearch/v0/opensearch_distro.py", line 297, in request
    resp = call(retries, resp_status_code)
  File "/var/lib/juju/agents/unit-opensearch-1/charm/lib/charms/opensearch/v0/opensearch_distro.py", line 252, in call
    raise OpenSearchHttpError()
charms.opensearch.v0.opensearch_exceptions.OpenSearchHttpError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-opensearch-1/charm/./src/charm.py", line 94, in <module>
    main(OpenSearchOperatorCharm)
  File "/var/lib/juju/agents/unit-opensearch-1/charm/venv/ops/main.py", line 456, in main
    _emit_charm_event(charm, dispatcher.event_name)
  File "/var/lib/juju/agents/unit-opensearch-1/charm/venv/ops/main.py", line 144, in _emit_charm_event
    event_to_emit.emit(*args, **kwargs)
  File "/var/lib/juju/agents/unit-opensearch-1/charm/venv/ops/framework.py", line 351, in emit
    framework._emit(event)
  File "/var/lib/juju/agents/unit-opensearch-1/charm/venv/ops/framework.py", line 853, in _emit
    self._reemit(event_path)
  File "/var/lib/juju/agents/unit-opensearch-1/charm/venv/ops/framework.py", line 943, in _reemit
    custom_handler(event)
  File "/var/lib/juju/agents/unit-opensearch-1/charm/lib/charms/opensearch/v0/opensearch_base_charm.py", line 434, in _on_opensearch_data_storage_detaching
    self._stop_opensearch()
  File "/var/lib/juju/agents/unit-opensearch-1/charm/lib/charms/opensearch/v0/opensearch_base_charm.py", line 825, in _stop_opensearch
    self.opensearch_exclusions.delete_current()
  File "/var/lib/juju/agents/unit-opensearch-1/charm/lib/charms/opensearch/v0/opensearch_nodes_exclusions.py", line 58, in delete_current
    self._node.is_cm_eligible() or self._node.is_voting_only()
  File "/usr/lib/python3.10/functools.py", line 981, in __get__
    val = self.func(instance)
  File "/var/lib/juju/agents/unit-opensearch-1/charm/lib/charms/opensearch/v0/opensearch_nodes_exclusions.py", line 161, in _node
    return self._charm.opensearch.current()
  File "/var/lib/juju/agents/unit-opensearch-1/charm/lib/charms/opensearch/v0/opensearch_distro.py", line 423, in current
    roles=conf_on_disk["node.roles"],
  File "/var/lib/juju/agents/unit-opensearch-1/charm/venv/ruamel/yaml/comments.py", line 842, in __getitem__
    return ordereddict.__getitem__(self, key)
KeyError: 'node.roles'

May worth to take a look, may be just a programming oversight?

Context revealed when investigating the issue.
When a unit is online, unit-specific service information is taken from the Opensearch API (/_nodes).
However if the unit is offline, we fall back to static configuration.
This is the part where we had the issue, in case node.roles was missing from the configuration.

repo: canonical/opensearch-operator


text:
test-branch/execute-job/wrong-commit-sha-on-pr/8ad3ab0e-128e-4004-9701-945d69d857a7

PR for testing 0e8a804667ca3eb6c07d8bfa381b1ace69f3ef5b

/canonical/self-hosted-runners/run-workflows 931ad21dd9ace68aaa0a7d341e94de96ad93fa6b

repo: canonical/repo-policy-compliance-tests