[SUPPORT] Multi Writer Jobs with OCC (U1 and U2) with Async Cleaner

Hello,
We have been experimenting with a multi-writer setup and have confirmed that it works perfectly with two writers. The image below shows our sample setup:

To further enhance our setup, we wanted to test running the cleaner in parallel asynchronously. The first run of the cleaner was successful, but subsequent runs have been failing.
In our setup, we have two jobs: u1 and u2.
u1 touches partitions in NY.
u2 touches partitions in CA.
Both jobs have the following common configurations:
# "hoodie.clean.automatic": "false",
# "hoodie.clean.async": "true",
"hoodie.write.concurrency.mode": "optimistic_concurrency_control",
"hoodie.cleaner.policy.failed.writes": "LAZY",
"hoodie.write.lock.provider": "org.apache.hudi.client.transaction.lock.FileSystemBasedLockProvider",

Note : Also tried # "hoodie.clean.automatic": true and false
We tested the setup both with and without the following flags:
# "hoodie.clean.automatic": "false",
# "hoodie.clean.async": "true",

Here is our cleaner async configuration:
spark-submit \
    --class 'org.apache.hudi.utilities.HoodieCleaner' \
    --packages 'org.apache.hudi:hudi-spark3.4-bundle_2.12:0.14.0' \
    --properties-file spark-config.properties \
    --master 'local[*]' \
    --executor-memory 3g \
    /Users/soumilshah/IdeaProjects/SparkProject/deltastreamerBroadcastJoins/jar/hudi-utilities-slim-bundle_2.12-0.14.0.jar \
    --target-base-path 'file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/' \
    --hoodie-conf 'hoodie.cleaner.policy=KEEP_LATEST_FILE_VERSIONS' \
    --hoodie-conf 'hoodie.cleaner.fileversions.retained=1' \
    --hoodie-conf 'hoodie.cleaner.parallelism=100' \
    --hoodie-conf 'hoodie.clean.automatic=true' \
    --hoodie-conf 'hoodie.clean.async=true' \
    --hoodie-conf 'hoodie.write.concurrency.mode=optimistic_concurrency_control' \
    --hoodie-conf 'hoodie.cleaner.policy.failed.writes=LAZY' \
    --hoodie-conf 'hoodie.write.lock.provider=org.apache.hudi.client.transaction.lock.FileSystemBasedLockProvider'

The cleaner fails when running together with both u1 and u2 jobs.
Logs

retrieving :: org.apache.spark#spark-submit-parent-bd84a89e-a4f1-4b97-a1d5-225d51043b44
	confs: [default]
	0 artifacts copied, 1 already retrieved (0kB/3ms)
24/06/01 10:16:11 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
24/06/01 10:16:11 INFO SparkContext: Running Spark version 3.4.0
24/06/01 10:16:11 INFO ResourceUtils: ==============================================================
24/06/01 10:16:11 INFO ResourceUtils: No custom resources configured for spark.driver.
24/06/01 10:16:11 INFO ResourceUtils: ==============================================================
24/06/01 10:16:11 INFO SparkContext: Submitted application: hoodie-cleaner-table_name=orders
24/06/01 10:16:11 INFO ResourceProfile: Default ResourceProfile created, executor resources: Map(cores -> name: cores, amount: 1, script: , vendor: , memory -> name: memory, amount: 1024, script: , vendor: , offHeap -> name: offHeap, amount: 0, script: , vendor: ), task resources: Map(cpus -> name: cpus, amount: 1.0)
24/06/01 10:16:11 INFO ResourceProfile: Limiting resource is cpu
24/06/01 10:16:11 INFO ResourceProfileManager: Added ResourceProfile id: 0
24/06/01 10:16:11 INFO SecurityManager: Changing view acls to: soumilshah
24/06/01 10:16:11 INFO SecurityManager: Changing modify acls to: soumilshah
24/06/01 10:16:11 INFO SecurityManager: Changing view acls groups to:
24/06/01 10:16:11 INFO SecurityManager: Changing modify acls groups to:
24/06/01 10:16:11 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: soumilshah; groups with view permissions: EMPTY; users with modify permissions: soumilshah; groups with modify permissions: EMPTY
24/06/01 10:16:11 INFO deprecation: mapred.output.compression.codec is deprecated. Instead, use mapreduce.output.fileoutputformat.compress.codec
24/06/01 10:16:11 INFO deprecation: mapred.output.compress is deprecated. Instead, use mapreduce.output.fileoutputformat.compress
24/06/01 10:16:11 INFO deprecation: mapred.output.compression.type is deprecated. Instead, use mapreduce.output.fileoutputformat.compress.type
24/06/01 10:16:11 INFO Utils: Successfully started service 'sparkDriver' on port 65007.
24/06/01 10:16:11 INFO SparkEnv: Registering MapOutputTracker
24/06/01 10:16:11 INFO SparkEnv: Registering BlockManagerMaster
24/06/01 10:16:11 INFO BlockManagerMasterEndpoint: Using org.apache.spark.storage.DefaultTopologyMapper for getting topology information
24/06/01 10:16:11 INFO BlockManagerMasterEndpoint: BlockManagerMasterEndpoint up
24/06/01 10:16:11 INFO SparkEnv: Registering BlockManagerMasterHeartbeat
24/06/01 10:16:11 INFO DiskBlockManager: Created local directory at /private/var/folders/qq/s_1bjv516pn_mck29cwdwxnm0000gp/T/blockmgr-2e982a52-ad15-457a-8856-7b9857ec303d
24/06/01 10:16:11 INFO MemoryStore: MemoryStore started with capacity 434.4 MiB
24/06/01 10:16:11 INFO SparkEnv: Registering OutputCommitCoordinator
24/06/01 10:16:11 INFO JettyUtils: Start Jetty <IP_ADDRESS>:8090 for SparkUI
24/06/01 10:16:11 INFO Utils: Successfully started service 'SparkUI' on port 8090.
24/06/01 10:16:11 INFO SparkContext: Added JAR file:///Users/soumilshah/.ivy2/jars/org.apache.hudi_hudi-spark3.4-bundle_2.12-0.14.0.jar at spark://<IP_ADDRESS>:65007/jars/org.apache.hudi_hudi-spark3.4-bundle_2.12-0.14.0.jar with timestamp<PHONE_NUMBER>606
24/06/01 10:16:11 INFO SparkContext: Added JAR file:/Users/soumilshah/IdeaProjects/SparkProject/deltastreamerBroadcastJoins/jar/hudi-utilities-slim-bundle_2.12-0.14.0.jar at spark://<IP_ADDRESS>:65007/jars/hudi-utilities-slim-bundle_2.12-0.14.0.jar with timestamp<PHONE_NUMBER>606
24/06/01 10:16:11 INFO Executor: Starting executor ID driver on host <IP_ADDRESS>
24/06/01 10:16:11 INFO Executor: Starting executor with user classpath (userClassPathFirst = false): ''
24/06/01 10:16:11 INFO Executor: Fetching spark://<IP_ADDRESS>:65007/jars/hudi-utilities-slim-bundle_2.12-0.14.0.jar with timestamp<PHONE_NUMBER>606
24/06/01 10:16:11 INFO TransportClientFactory: Successfully created connection to /<IP_ADDRESS>:65007 after 15 ms (0 ms spent in bootstraps)
24/06/01 10:16:11 INFO Utils: Fetching spark://<IP_ADDRESS>:65007/jars/hudi-utilities-slim-bundle_2.12-0.14.0.jar to /private/var/folders/qq/s_1bjv516pn_mck29cwdwxnm0000gp/T/spark-61fbec77-5617-4513-8b0d-a0b6101feee8/userFiles-ecf41982-1cd7-4af4-a911-e46b337eb2dc/fetchFileTemp10727026823756083903.tmp
24/06/01 10:16:12 INFO Executor: Adding file:/private/var/folders/qq/s_1bjv516pn_mck29cwdwxnm0000gp/T/spark-61fbec77-5617-4513-8b0d-a0b6101feee8/userFiles-ecf41982-1cd7-4af4-a911-e46b337eb2dc/hudi-utilities-slim-bundle_2.12-0.14.0.jar to class loader
24/06/01 10:16:12 INFO Executor: Fetching spark://<IP_ADDRESS>:65007/jars/org.apache.hudi_hudi-spark3.4-bundle_2.12-0.14.0.jar with timestamp<PHONE_NUMBER>606
24/06/01 10:16:12 INFO Utils: Fetching spark://<IP_ADDRESS>:65007/jars/org.apache.hudi_hudi-spark3.4-bundle_2.12-0.14.0.jar to /private/var/folders/qq/s_1bjv516pn_mck29cwdwxnm0000gp/T/spark-61fbec77-5617-4513-8b0d-a0b6101feee8/userFiles-ecf41982-1cd7-4af4-a911-e46b337eb2dc/fetchFileTemp13175198092609918093.tmp
24/06/01 10:16:12 INFO Executor: Adding file:/private/var/folders/qq/s_1bjv516pn_mck29cwdwxnm0000gp/T/spark-61fbec77-5617-4513-8b0d-a0b6101feee8/userFiles-ecf41982-1cd7-4af4-a911-e46b337eb2dc/org.apache.hudi_hudi-spark3.4-bundle_2.12-0.14.0.jar to class loader
24/06/01 10:16:12 INFO Utils: Successfully started service 'org.apache.spark.network.netty.NettyBlockTransferService' on port 65010.
24/06/01 10:16:12 INFO NettyBlockTransferService: Server created on <IP_ADDRESS>:65010
24/06/01 10:16:12 INFO BlockManager: Using org.apache.spark.storage.RandomBlockReplicationPolicy for block replication policy
24/06/01 10:16:12 INFO BlockManagerMaster: Registering BlockManager BlockManagerId(driver, <IP_ADDRESS>, 65010, None)
24/06/01 10:16:12 INFO BlockManagerMasterEndpoint: Registering block manager <IP_ADDRESS>:65010 with 434.4 MiB RAM, BlockManagerId(driver, <IP_ADDRESS>, 65010, None)
24/06/01 10:16:12 INFO BlockManagerMaster: Registered BlockManager BlockManagerId(driver, <IP_ADDRESS>, 65010, None)
24/06/01 10:16:12 INFO BlockManager: Initialized BlockManager: BlockManagerId(driver, <IP_ADDRESS>, 65010, None)
24/06/01 10:16:12 WARN DFSPropertiesConfiguration: Cannot find HUDI_CONF_DIR, please set it as the dir of hudi-defaults.conf
24/06/01 10:16:12 WARN DFSPropertiesConfiguration: Properties file file:/etc/hudi/conf/hudi-defaults.conf not found. Ignoring to load props file
24/06/01 10:16:12 INFO HoodieCleaner: Creating Cleaner with configs : {hoodie.cleaner.fileversions.retained=1, hoodie.clean.automatic=true, hoodie.write.lock.provider=org.apache.hudi.client.transaction.lock.FileSystemBasedLockProvider, hoodie.cleaner.policy.failed.writes=LAZY, hoodie.write.concurrency.mode=optimistic_concurrency_control, hoodie.cleaner.policy=KEEP_LATEST_FILE_VERSIONS, hoodie.clean.async=true, hoodie.cleaner.parallelism=100}
24/06/01 10:16:12 INFO HoodieWriteConfig: Automatically set hoodie.cleaner.policy.failed.writes=LAZY since optimistic concurrency control is used
24/06/01 10:16:12 INFO EmbeddedTimelineService: Starting Timeline service !!
24/06/01 10:16:12 INFO EmbeddedTimelineService: Overriding hostIp to (<IP_ADDRESS>) found in spark-conf. It was null
24/06/01 10:16:12 INFO FileSystemViewManager: Creating View Manager with storage type :MEMORY
24/06/01 10:16:12 INFO FileSystemViewManager: Creating in-memory based Table View
24/06/01 10:16:12 INFO log: Logging initialized @2012ms to org.apache.hudi.org.eclipse.jetty.util.log.Slf4jLog
24/06/01 10:16:12 INFO Javalin:
       __                      __ _            __ __
      / /____ _ _   __ ____ _ / /(_)____      / // /
 __  / // __ `/| | / // __ `// // // __ \    / // /_
/ /_/ // /_/ / | |/ // /_/ // // // / / /   /__  __/
\____/ \__,_/  |___/ \__,_//_//_//_/ /_/      /_/

          https://javalin.io/documentation

24/06/01 10:16:12 INFO Javalin: Starting Javalin ...
24/06/01 10:16:12 INFO Javalin: You are running Javalin 4.6.7 (released October 24, 2022. Your Javalin version is 586 days old. Consider checking for a newer version.).
24/06/01 10:16:12 INFO Server: jetty-9.4.48.v20220622; built: 2022-06-21T20:42:25.880Z; git: 6b67c5719d1f4371b33655ff2d047d24e171e49a; jvm 11.0.22+0
24/06/01 10:16:12 INFO Server: Started @2143ms
24/06/01 10:16:12 INFO Javalin: Listening on http://localhost:65011/
24/06/01 10:16:12 INFO Javalin: Javalin started in 68ms \o/
24/06/01 10:16:12 INFO TimelineService: Starting Timeline server on port :65011
24/06/01 10:16:12 INFO EmbeddedTimelineService: Started embedded timeline server at <IP_ADDRESS>:65011
24/06/01 10:16:12 INFO BaseHoodieClient: Timeline Server already running. Not restarting the service
24/06/01 10:16:12 INFO CleanerUtils: Cleaned failed attempts if any
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading HoodieTableMetaClient from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableConfig: Loading table properties from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/hoodie.properties
24/06/01 10:16:12 INFO HoodieTableMetaClient: Finished Loading Table of type COPY_ON_WRITE(version=1, baseFileFormat=PARQUET) from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading Active commit timeline for file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieActiveTimeline: Loaded instants upto : Option{val=[==>20240601101606185__commit__INFLIGHT__20240601101606821]}
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading HoodieTableMetaClient from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableConfig: Loading table properties from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/hoodie.properties
24/06/01 10:16:12 INFO HoodieTableMetaClient: Finished Loading Table of type COPY_ON_WRITE(version=1, baseFileFormat=PARQUET) from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading HoodieTableMetaClient from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/metadata
24/06/01 10:16:12 INFO HoodieTableConfig: Loading table properties from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/metadata/.hoodie/hoodie.properties
24/06/01 10:16:12 INFO HoodieTableMetaClient: Finished Loading Table of type MERGE_ON_READ(version=1, baseFileFormat=HFILE) from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/metadata
24/06/01 10:16:12 INFO HoodieActiveTimeline: Loaded instants upto : Option{val=[==>20240601101606185__deltacommit__INFLIGHT__20240601101612494]}
24/06/01 10:16:12 INFO AbstractTableFileSystemView: Took 1 ms to read  0 instants, 0 replaced file groups
24/06/01 10:16:12 INFO ClusteringUtils: Found 0 files in pending clustering operations
24/06/01 10:16:12 INFO FileSystemViewManager: Creating View Manager with storage type :REMOTE_FIRST
24/06/01 10:16:12 INFO FileSystemViewManager: Creating remote first table view
24/06/01 10:16:12 INFO HoodieHeartbeatClient: Heartbeat not found in internal map, falling back to reading from DFS
24/06/01 10:16:12 INFO HoodieHeartbeatClient: Heartbeat not found in internal map, falling back to reading from DFS
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading HoodieTableMetaClient from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableConfig: Loading table properties from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/hoodie.properties
24/06/01 10:16:12 INFO HoodieTableMetaClient: Finished Loading Table of type COPY_ON_WRITE(version=1, baseFileFormat=PARQUET) from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading Active commit timeline for file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieActiveTimeline: Loaded instants upto : Option{val=[==>20240601101606185__commit__INFLIGHT__20240601101606821]}
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading HoodieTableMetaClient from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableConfig: Loading table properties from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/hoodie.properties
24/06/01 10:16:12 INFO HoodieTableMetaClient: Finished Loading Table of type COPY_ON_WRITE(version=1, baseFileFormat=PARQUET) from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading HoodieTableMetaClient from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/metadata
24/06/01 10:16:12 INFO HoodieTableConfig: Loading table properties from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/metadata/.hoodie/hoodie.properties
24/06/01 10:16:12 INFO HoodieTableMetaClient: Finished Loading Table of type MERGE_ON_READ(version=1, baseFileFormat=HFILE) from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/metadata
24/06/01 10:16:12 INFO HoodieActiveTimeline: Loaded instants upto : Option{val=[==>20240601101606185__deltacommit__INFLIGHT__20240601101612494]}
24/06/01 10:16:12 INFO AbstractTableFileSystemView: Took 0 ms to read  0 instants, 0 replaced file groups
24/06/01 10:16:12 INFO ClusteringUtils: Found 0 files in pending clustering operations
24/06/01 10:16:12 INFO FileSystemViewManager: Creating View Manager with storage type :REMOTE_FIRST
24/06/01 10:16:12 INFO FileSystemViewManager: Creating remote first table view
24/06/01 10:16:12 INFO BaseHoodieWriteClient: Cleaner started
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading HoodieTableMetaClient from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableConfig: Loading table properties from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/hoodie.properties
24/06/01 10:16:12 INFO HoodieTableMetaClient: Finished Loading Table of type COPY_ON_WRITE(version=1, baseFileFormat=PARQUET) from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading Active commit timeline for file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieActiveTimeline: Loaded instants upto : Option{val=[==>20240601101606185__commit__INFLIGHT__20240601101606821]}
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading HoodieTableMetaClient from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableConfig: Loading table properties from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/hoodie.properties
24/06/01 10:16:12 INFO HoodieTableMetaClient: Finished Loading Table of type COPY_ON_WRITE(version=1, baseFileFormat=PARQUET) from file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
24/06/01 10:16:12 INFO HoodieTableMetaClient: Loading HoodieTableMetaClient from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/metadata
24/06/01 10:16:12 INFO HoodieTableConfig: Loading table properties from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/metadata/.hoodie/hoodie.properties
24/06/01 10:16:12 INFO HoodieTableMetaClient: Finished Loading Table of type MERGE_ON_READ(version=1, baseFileFormat=HFILE) from file:/Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/.hoodie/metadata
24/06/01 10:16:12 INFO HoodieActiveTimeline: Loaded instants upto : Option{val=[==>20240601101606185__deltacommit__INFLIGHT__20240601101612494]}
24/06/01 10:16:12 INFO AbstractTableFileSystemView: Took 0 ms to read  0 instants, 0 replaced file groups
24/06/01 10:16:12 INFO ClusteringUtils: Found 0 files in pending clustering operations
24/06/01 10:16:12 INFO FileSystemViewManager: Creating View Manager with storage type :REMOTE_FIRST
24/06/01 10:16:12 INFO FileSystemViewManager: Creating remote first table view
24/06/01 10:16:12 INFO BaseHoodieWriteClient: Scheduling cleaning at instant time :20240601101612647
24/06/01 10:16:12 INFO BaseHoodieClient: Stopping Timeline service !!
24/06/01 10:16:12 INFO EmbeddedTimelineService: Closing Timeline server
24/06/01 10:16:12 INFO TimelineService: Closing Timeline Service
24/06/01 10:16:12 INFO Javalin: Stopping Javalin ...
24/06/01 10:16:12 INFO Javalin: Javalin has stopped
24/06/01 10:16:12 INFO TimelineService: Closed Timeline Service
24/06/01 10:16:12 INFO EmbeddedTimelineService: Closed Timeline server
24/06/01 10:16:12 INFO TransactionManager: Transaction manager closed
24/06/01 10:16:12 INFO TransactionManager: Transaction manager closed
24/06/01 10:16:12 ERROR HoodieCleaner: Failed to run cleaning for file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database=default/table_name=orders/
java.lang.ExceptionInInitializerError
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:398)
	at org.apache.avro.util.ClassUtils.forName(ClassUtils.java:95)
	at org.apache.avro.util.ClassUtils.forName(ClassUtils.java:75)
	at org.apache.avro.specific.SpecificData.lambda$getClass$2(SpecificData.java:257)
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
	at org.apache.avro.util.MapUtil.computeIfAbsent(MapUtil.java:42)
	at org.apache.avro.specific.SpecificData.getClass(SpecificData.java:255)
	at org.apache.avro.specific.SpecificData.newRecord(SpecificData.java:488)
	at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:237)
	at org.apache.avro.specific.SpecificDatumReader.readRecord(SpecificDatumReader.java:123)
	at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:180)
	at org.apache.avro.generic.GenericDatumReader.readMap(GenericDatumReader.java:355)
	at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:186)
	at org.apache.avro.specific.SpecificDatumReader.readField(SpecificDatumReader.java:136)
	at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:248)
	at org.apache.avro.specific.SpecificDatumReader.readRecord(SpecificDatumReader.java:123)
	at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:180)
	at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:161)
	at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:154)
	at org.apache.avro.file.DataFileStream.next(DataFileStream.java:263)
	at org.apache.avro.file.DataFileStream.next(DataFileStream.java:248)
	at org.apache.hudi.common.table.timeline.TimelineMetadataUtils.deserializeAvroMetadata(TimelineMetadataUtils.java:209)
	at org.apache.hudi.common.table.timeline.TimelineMetadataUtils.deserializeHoodieCleanMetadata(TimelineMetadataUtils.java:173)
	at org.apache.hudi.table.action.clean.CleanPlanActionExecutor.getCommitsSinceLastCleaning(CleanPlanActionExecutor.java:74)
	at org.apache.hudi.table.action.clean.CleanPlanActionExecutor.needsCleaning(CleanPlanActionExecutor.java:89)
	at org.apache.hudi.table.action.clean.CleanPlanActionExecutor.execute(CleanPlanActionExecutor.java:173)
	at org.apache.hudi.table.HoodieSparkCopyOnWriteTable.scheduleCleaning(HoodieSparkCopyOnWriteTable.java:217)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.scheduleTableServiceInternal(BaseHoodieTableServiceClient.java:628)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.clean(BaseHoodieTableServiceClient.java:751)
	at org.apache.hudi.client.BaseHoodieWriteClient.clean(BaseHoodieWriteClient.java:861)
	at org.apache.hudi.client.BaseHoodieWriteClient.clean(BaseHoodieWriteClient.java:834)
	at org.apache.hudi.client.BaseHoodieWriteClient.clean(BaseHoodieWriteClient.java:865)
	at org.apache.hudi.utilities.HoodieCleaner.run(HoodieCleaner.java:70)
	at org.apache.hudi.utilities.HoodieCleaner.main(HoodieCleaner.java:114)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
	at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:1020)
	at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:192)
	at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:215)
	at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:91)
	at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1111)
	at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1120)
	at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.IllegalStateException: Recursive update
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1760)
	at org.apache.avro.util.MapUtil.computeIfAbsent(MapUtil.java:42)
	at org.apache.avro.specific.SpecificData.getClass(SpecificData.java:255)
	at org.apache.avro.specific.SpecificData.getForSchema(SpecificData.java:162)
	at org.apache.avro.specific.SpecificDatumWriter.<init>(SpecificDatumWriter.java:47)
	at org.apache.hudi.avro.model.HoodieCleanPartitionMetadata.<clinit>(HoodieCleanPartitionMetadata.java:532)
	... 47 more
24/06/01 10:16:12 INFO SparkContext: SparkContext is stopping with exitCode 0.
24/06/01 10:16:12 INFO SparkUI: Stopped Spark web UI at http://<IP_ADDRESS>:8090
24/06/01 10:16:12 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
24/06/01 10:16:12 INFO MemoryStore: MemoryStore cleared
24/06/01 10:16:12 INFO BlockManager: BlockManager stopped
24/06/01 10:16:12 INFO BlockManagerMaster: BlockManagerMaster stopped
24/06/01 10:16:12 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
24/06/01 10:16:12 INFO SparkContext: Successfully stopped SparkContext
24/06/01 10:16:12 INFO ShutdownHookManager: Shutdown hook called
24/06/01 10:16:12 INFO ShutdownHookManager: Deleting directory /private/var/folders/qq/s_1bjv516pn_mck29cwdwxnm0000gp/T/spark-9d9ed177-add3-4aea-bd51-af54389afe1e
24/06/01 10:16:12 INFO ShutdownHookManager: Deleting directory /private/var/folders/qq/s_1bjv516pn_mck29cwdwxnm0000gp/T/spark-61fbec77-5617-4513-8b0d-a0b6101feee8
(base) soumilshah@Soumils-MacBook-Pro conflictdetection %

U1.py
try:
    import os
    import sys
    import uuid
    import pyspark
    import datetime
    from pyspark.sql import SparkSession
    from pyspark import SparkConf, SparkContext
    from faker import Faker
    import datetime
    from datetime import datetime
    import random
    import pandas as pd
    from pyspark.sql.types import StructType, StructField, StringType, DateType, FloatType
    from pyspark.sql.functions import col

    print("Imports loaded ")

except Exception as e:
    print("error", e)

HUDI_VERSION = '0.14.0'
SPARK_VERSION = '3.4'

os.environ["JAVA_HOME"] = "/opt/homebrew/opt/openjdk@11"
SUBMIT_ARGS = f"--packages org.apache.hudi:hudi-spark{SPARK_VERSION}-bundle_2.12:{HUDI_VERSION} pyspark-shell"
os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS
os.environ['PYSPARK_PYTHON'] = sys.executable

spark = SparkSession.builder \
    .config('spark.serializer', 'org.apache.spark.serializer.KryoSerializer') \
    .config('spark.sql.extensions', 'org.apache.spark.sql.hudi.HoodieSparkSessionExtension') \
    .config('className', 'org.apache.hudi') \
    .config('spark.sql.hive.convertMetastoreParquet', 'false') \
    .getOrCreate()

schema = StructType([
    StructField("orderID", StringType(), True),
    StructField("productSKU", StringType(), True),
    StructField("customerID", StringType(), True),
    StructField("orderDate", StringType(), True),
    StructField("orderAmount", FloatType(), True),
    StructField("state", StringType(), True)
])

def write_to_hudi(spark_df,
                  table_name,
                  db_name,
                  method='upsert',
                  table_type='COPY_ON_WRITE',
                  recordkey='',
                  precombine='',
                  partition_fields='',
                  index_type='BLOOM'
                  ):
    path = f"file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database={db_name}/table_name={table_name}"

    hudi_options = {
        'hoodie.table.name': table_name,
        'hoodie.datasource.write.table.type': table_type,
        'hoodie.datasource.write.table.name': table_name,
        'hoodie.datasource.write.operation': method,
        'hoodie.datasource.write.recordkey.field': recordkey,
        'hoodie.datasource.write.precombine.field': precombine,
        "hoodie.datasource.write.partitionpath.field": partition_fields,

        # "hoodie.clean.automatic":"false",
        # " hoodie.clean.async":"true",

        "hoodie.write.concurrency.mode": "optimistic_concurrency_control",
        "hoodie.cleaner.policy.failed.writes": "LAZY",
        "hoodie.write.lock.provider": "org.apache.hudi.client.transaction.lock.FileSystemBasedLockProvider",

    }
    print(hudi_options)

    print("\n")
    print(path)
    print("\n")

    spark_df.write.format("hudi"). \
        options(**hudi_options). \
        mode("append"). \
        save(path)

# Initial data
data = [
    ("order1", "prod001##", "cust001", "2024-01-15", 150.00, "CA"),
    ("order006", "prod006##", "cust006", "2024-01-20", 350.00, "CA"),
]

# Loop to update productSKU and write to Hudi
for i in range(1, 100):  # Number of iterations
    # Update productSKU
    updated_data = [(orderID, f"{productSKU[:-1]}update{i}", customerID, orderDate, orderAmount, state)
                    for (orderID, productSKU, customerID, orderDate, orderAmount, state) in data]

    # Create the DataFrame with updated data
    df = spark.createDataFrame(updated_data, schema)

    # Show the DataFrame with the updated "productSKU" column
    df.show()

    # Write to Hudi
    write_to_hudi(
        spark_df=df,
        method="upsert",
        db_name="default",
        table_name="orders",
        recordkey="orderID",
        precombine="orderDate",
        partition_fields="state",
        index_type="RECORD_INDEX"
    )
    import time
    time.sleep(3)

spark.stop()

u2.py
try:
    import os
    import sys
    import uuid
    import pyspark
    import datetime
    from pyspark.sql import SparkSession
    from pyspark import SparkConf, SparkContext
    from faker import Faker
    import datetime
    from datetime import datetime
    import random
    import pandas as pd
    from pyspark.sql.types import StructType, StructField, StringType, DateType, FloatType
    from pyspark.sql.functions import col

    print("Imports loaded ")

except Exception as e:
    print("error", e)

HUDI_VERSION = '0.14.0'
SPARK_VERSION = '3.4'

os.environ["JAVA_HOME"] = "/opt/homebrew/opt/openjdk@11"
SUBMIT_ARGS = f"--packages org.apache.hudi:hudi-spark{SPARK_VERSION}-bundle_2.12:{HUDI_VERSION} pyspark-shell"
os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS
os.environ['PYSPARK_PYTHON'] = sys.executable

spark = SparkSession.builder \
    .config('spark.serializer', 'org.apache.spark.serializer.KryoSerializer') \
    .config('spark.sql.extensions', 'org.apache.spark.sql.hudi.HoodieSparkSessionExtension') \
    .config('className', 'org.apache.hudi') \
    .config('spark.sql.hive.convertMetastoreParquet', 'false') \
    .getOrCreate()

schema = StructType([
    StructField("orderID", StringType(), True),
    StructField("productSKU", StringType(), True),
    StructField("customerID", StringType(), True),
    StructField("orderDate", StringType(), True),
    StructField("orderAmount", FloatType(), True),
    StructField("state", StringType(), True)
])

def write_to_hudi(spark_df,
                  table_name,
                  db_name,
                  method='upsert',
                  table_type='COPY_ON_WRITE',
                  recordkey='',
                  precombine='',
                  partition_fields='',
                  index_type='BLOOM'
                  ):
    path = f"file:///Users/soumilshah/IdeaProjects/SparkProject/tem/database={db_name}/table_name={table_name}"

    hudi_options = {
        'hoodie.table.name': table_name,
        'hoodie.datasource.write.table.type': table_type,
        'hoodie.datasource.write.table.name': table_name,
        'hoodie.datasource.write.operation': method,
        'hoodie.datasource.write.recordkey.field': recordkey,
        'hoodie.datasource.write.precombine.field': precombine,
        "hoodie.datasource.write.partitionpath.field": partition_fields,

        # "hoodie.clean.automatic":"false",
        # " hoodie.clean.async":"true",

        "hoodie.write.concurrency.mode": "optimistic_concurrency_control",
        "hoodie.cleaner.policy.failed.writes": "LAZY",
        "hoodie.write.lock.provider": "org.apache.hudi.client.transaction.lock.FileSystemBasedLockProvider",

    }
    print(hudi_options)

    print("\n")
    print(path)
    print("\n")

    spark_df.write.format("hudi"). \
        options(**hudi_options). \
        mode("append"). \
        save(path)

# Initial data
data = [
    ("order002", "prod002", "cust002", "2024-01-16", 200.00, "NY"),
    ("order007", "prod007", "cust007", "2024-01-21", 400.00, "NY")
]

# Loop to update productSKU and write to Hudi
for i in range(1, 100):  # Number of iterations
    # Update productSKU
    updated_data = [(orderID, f"{productSKU[:-1]}update{i}", customerID, orderDate, orderAmount, state)
                    for (orderID, productSKU, customerID, orderDate, orderAmount, state) in data]

    # Create the DataFrame with updated data
    df = spark.createDataFrame(updated_data, schema)

    # Show the DataFrame with the updated "productSKU" column
    df.show()

    # Write to Hudi
    write_to_hudi(
        spark_df=df,
        method="upsert",
        db_name="default",
        table_name="orders",
        recordkey="orderID",
        precombine="orderDate",
        partition_fields="state",
        index_type="RECORD_INDEX"
    )
    import time

    time.sleep(2)

spark.stop()

Any insights or suggestions on resolving this issue would be greatly appreciated.

did you try disabling cleaning in one writer while enabling it only in the other one.
Essentially, in a multi writer set up, its good to have all table services run with just 1 writer while all other writes just do ingestion.
can you try that.


Input on react v0.15.2

Hey on react v0.15.2 I'm getting the unknown prop invalid on input tag, I also get this for 'aria-invalid'.
VM10648:44 Warning: Unknown prop invalid on <input> tag. Remove this prop from the element. For details, see https://fb.me/react-unknown-prop

That's weird that aria-invalid is flagging the new warning. Are you still getting this with version 0.3?

I might be mistaken about aria-invalid, I think I tried ariaInvalid. But yes this is with v0.3. I'll check the aria invalid on Monday.

Ok, so aria-invalid doesn't throw an error, but it doesn't seem to do anything either - that might be my setup though.

You should be able to pass valid HTML attributes to components when needed, but Rebass should be stripping out custom props used in the library. If that's not the case feel free to reopen this issue with a link to a jsbin or similar.


SEA servers not pulling games

SERVER: SEA (public)
Here are the detilals...
This API call has a player "Kronos17" who on stream played a game with 5 more people all of them were T9-10. Yet the match is not shwing up in API.
The SS of the match data - https://cdn.discordapp.com/attachments/273223857337401344/343093128158248960/image.png
https://api.dc01.gamelockerapp.com/shards/sg/matches?filter[playerNames]=Kronos17&sort=-createdAt

Links to all players and their records - all of them have played several ranked games
https://www.vainsocial.com/player/Nikhil21
https://www.vainsocial.com/player/NomNomTNT
https://www.vainsocial.com/player/ConQuisTaDoR
https://www.vainsocial.com/player/DevourX
https://www.vainsocial.com/player/yoyoAjay
https://www.vainsocial.com/player/Kronos17
Possible spectators in matches were:
VGIF1 (can't pull in API)
VGIF2 (0 ranked matches)
VGIF4 (58 ranked matches)

here is another of the players who played 2 matches on stream both private draft.
https://api.dc01.gamelockerapp.com/shards/sg/matches?filter[playerNames]=Nikhil21&sort=-createdAt&filter[createdAt-start]=2017-08-01T13:42:05.377Z

Other matches which have same fate....
https://cdn.discordapp.com/attachments/273223857337401344/343100731810906113/image.png
https://cdn.discordapp.com/attachments/273223857337401344/343100766401200128/image.png
https://cdn.discordapp.com/attachments/273223857337401344/343100775251312641/image.png

URLs to API with players who played these matches
https://api.dc01.gamelockerapp.com/shards/sg/matches?filter[playerNames]=Xulfe&sort=-createdAt&filter[createdAt-start]=2017-08-01T13:42:05.377Z

https://api.dc01.gamelockerapp.com/shards/sg/matches?filter[playerNames]=Rishi0010&sort=-createdAt&filter[createdAt-start]=2017-08-01T13:42:05.377Z

https://api.dc01.gamelockerapp.com/shards/sg/matches?filter[playerNames]=MkD&sort=-createdAt&filter[createdAt-start]=2017-08-01T13:42:05.377Z

I'm logged into my SEA account, just played a BR, it showed up. We can rule out that SEA is not pulling any games.

SEA is getting games - that's not an issue.
it's either no Private Draft games are getting pulled since 2.6 - check on VGMINER for same people i linked up - they have games in 2.5 but none in 2.6. or something peculiar with these matches

SEA is getting Private Draft Matches confirmed. I have SEA Matches that are done for EZL Matches that are coming through on the API. I believe the issue is somewhere in one of three portions because they are the only differences from 1 match to another.

Spectators
Streaming Using In-Game Mobcrush Client
Spectator Client

A game is set up in almost the same manner so if some matches are showing up they should all be showing up. The only differences that can occur between the setup of matches are listed.
Hope this helps.

I tried the first match with NomNomTNT and Kronos17.
Kronos17 (sg) has the player id 6477b444-f0bd-11e4-88c5-06d90c28bf1a and has a created_at of 2017-08-04T14:16:54Z.
curl -g "https://api.dc01.gamelockerapp.com/shards/sg/players?filter[playerNames]=Kronos17" -H "Authorization: Bearer $APIKEY" -H "X-TITLE-ID: semc-vainglory" -H "Accept: application/vnd.api+json" | jq "."

NomNomTNT (sg) has the player id d27d17ca-6324-11e5-b8b8-06d90c28bf1a and has a created_at of 2017-08-05T17:19:34Z. (same curl, different name)
DevourX (sg) has the player id 65a86d88-6cf8-11e5-9e50-06eb725f8a76 and has a created_at of 2017-08-04T11:46:31Z.
This query should return a private_party_draft match at 2017-08-04, played at about 18:00 (that was when @kvahuja reported the bug, he needs to confirm).
Looking at the accounts that spectate, I saw two names on recent streams: VGIF4 and VGIF1. Presumably, VGIF2 and VGIF3 are used as well.
Querying the API for those names:

VGIF1 cannot be found on /sg/players but has played two blitz_pvp_ranked match on April 11th with the playerID 100600dc-de2d-11e6-af62-06a9175d25fa, the query returns player objects. Looking up matches by the id gives the same results as the lookup by name. Looking up /sg/players by id returns a 404. Looking up /sg/players/{id} returns a 404.

curl -g "https://api.dc01.gamelockerapp.com/shards/sg/players?filter[playerNames]=VGIF1" -H "Authorization: Bearer $APIKEY" -H "X-TITLE-ID: semc-vainglory" -H "Accept: application/vnd.api+json" | jq "."  # should succeed
curl -g "https://api.dc01.gamelockerapp.com/shards/sg/matches?filter[playerNames]=VGIF1&filter[createdAt-start]=2017-04-01T00:00:00Z" -H "Authorization: Bearer $APIKEY" -H "X-TITLE-ID: semc-vainglory" -H "Accept: application/vnd.api+json" | jq "."  # returns matches?!

VGIF2 exists on /sg/players, and I can find matches casual and blitz_pvp_ranked.
VGIF3 exists on /sg/players with a createdAt in 2017-05, and I can find matches casual, blitz_pvp_ranked and casual_aral.
VGIF4 exists on /sg/players with a createdAt in 2017-08, and I can find matches ranked and casual_aral.

I suspect that data did not get stored on /players in the beginning of April due to #151, that VGIF1 is affected as an account that had no activity besides during the downtime where you accidentally discarded player object updates, and you are now rejecting matches with the spectator VGIF1 as invalid because the player object does not exist in your database.

they didnt use VGIF1 all day yesterday and still we cant get games

Hey Folks - We looked, no matches are being missed.  @schneefux is likely correct on #151.  Its possible there was a game server issue or some other transient thing.  I dont think this is enough to lose confidence in either the game systems or the api, as we compare quite frequently and don't see any discrepancies.  I'm closing this because there's nothing we can do further to address this.

hey @schneefux Just want to make sure you know that this should not work, and that is expected.  We don't associate a match with a player unless they were on a team.  Spectatorship doesn't really mean much, other than to give you a queue as to who was casting.
curl -g "https://api.dc01.gamelockerapp.com/shards/sg/matches?filter[playerNames]=VGIF1&filter[createdAt-start]=2017-04-01T00:00:00Z" -H "Authorization: Bearer $APIKEY" -H "X-TITLE-ID: semc-vainglory" -H "Accept: application/vnd.api+json" | jq "."  # returns matches?!


about xorm Exec 'use ?'

my model like this:
var Db *xorm.Engine
...

my handler like this:
_, err := Db.Exec("use ?", "SomeDbName")
...

err:
Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

can not use '?' in Exec ?

Yes, just Db.Exec("use SomeDbName").  Only values use ? but not table names, column names.

@lunny  ok, i'm just confirming, thank you very much.


Fix TOC generation

I need TOC to be different files for each language

toc.md
toc.ru.md

based on content of end directory (if only en files are presented then we dont show directory heading in TOC)

Added ineffective implementation, but it works at least
https://github.com/nikitazavadsky/de_cheatsheet/pull/4


[go to reference] need some jump

hello guys ,i dont know what i think is a feature or a bug?
what happen to me?
i use C/C++ EXTENSION for STM32 C language coding.
but when i push the button [go to reference ].it do not work ,it just show some REFERENCE at left by a new tab, do not jump ,do not report the error.
just show out at the left tab by a new page ,so i have to click the new tab page to see what i want.
is there a switch for show on reference tab or jump to reference?
i don't want my hands away from keyboard so when i just have to check out some reference.
thanks for watch ,have a nice day.
see yah.
BTW this is the png for what happen to me:

You can use F4 and Shift+F4 to navigate the result of the references view


Housekeeping

Some end-of-year/twixtmas refactoring; mainly aimed to make it very slightly easier to implement new games.

Standardization of State/FM.reset()
Removed the requirement to implement a _reset() method on any extension of AbstractGameState.
Currently games split their reset between GS and FM - which can lead to confusion (it has confused me in the past).
Now the reset of the GS to its start of game status is the responsibility of FM.reset(), which has full access.
This includes a single point for setting the initial game phase (which previously occured in two different places).

Default GamePhase

Refactored to live in CoreContants.
The Main phase is not used by all games, but was automatically set as the starting phase (unless explicitly overridden).
To reduce confusion I have refactored GS.setMainGamePhase() to be GS.setGaminPhase(...Main...) so it is clear what this does.

StandardForwardModel
This it intended to be the new standard to extend for new games. For the moment it just includes the functionality to call the action.execute() stuff which iis otherwise repeated in every single FM. An extension must then implement:
_afterAction(GA, Action);  which is clear when this is called.
This has been used for all games except for Pandemic (use of RuleBasedForwardModel) and ExplodingKittens (which is a very non-trivial re-write job to get it to fit).

Refactored TurnOrder.endRound
This now provides two hooks for sub-classes:
_endRound() for stuff that is genuinely at the end of a round; before we increment timers, publish the ROUND_OVER event and move the player on
_startRound() for set up at the start of the next round (which may not take place if the game ends)

All games then converted to this. The advantage is that the publication of ROUND_OVER events is now firmly in the framework for most games (and all new ones).
I also intended to do the same for endPlayerTurn() (and hence for TURN_OVER events); but ran out of time.

Refactored GS.gameEnd() code.
 This is now standardised in AGS.endGame(). This works for all games with a Score and (optionally) a Tiebreak condition. This also standardises the use of WIN/LOSE/DRAW, which varied across games. (DRAW means two or more player in joint top position after considering tiebreaks).
It does not work for 2-player insta-win games (Connect4, TicTacToe), which have been left unchanged.

As part of this I also noticed that we have FM.endGame(), which is only called by Game (so not, for example, by MCTS or RHEA during rollouts). I suspect we could (should?) get rid of this to avoid confusion...thoughts?

Moved Game.terminateTimers to be before GAME_OVER event is published; otherwise incorrect data are reported.

2 things I don't like when making a new game are

that you have to jump around to various places to register your new game (and those are now also in 2 different classes which are also in different packages, with the separate parameter factory in 'core'). Proposed additional refactor: have a 'game register' package which breaks down the GameType class into clear places where you have to define your GS, FM, params and GUI classes. And also removing unused methods in there, like the string to game type method.
and also that extending abstract classes creates methods that return null by default, so things crash when you try to run and the errors are not always intuitive (especially for the 'getAllComponents' error). I don't think there's a workaround for this, so having a 'template game' that returns empty things, 0s, 'this' etc. with todos and comments would be good.

But I can do this last thing :)

I fully agree! Taking that first bullet point into scope is a great idea.
And ditto, a 'template game' could be helpful.


Add meanshift query in CubePipeline

example run: ./bin/cli.sh core/demo/cli_meanshift_rest.json

Coverage remained the same at 94.032% when pulling 2f9af1933c73c17a746714e86b875594205b1b3e on kexinrong:meanshift into 7c0ba6349f5a01150574faa39e5ae76cefc66f64 on stanford-futuredata:master.

Example result:
{"numTotal":1300.0,"results":[{"metric":"support: 0.077, mean_deviation: 3.325","match":"location=AUS, device=apple, version=v1","aggregate":"count: 100.000, m1: 20000.000, m2: 4022500.000"}]}

Coverage remained the same at 94.032% when pulling 54fdf51dc5a71ab1d10fd129394a47c1b14c17e0 on kexinrong:meanshift into 7c0ba6349f5a01150574faa39e5ae76cefc66f64 on stanford-futuredata:master.

we should expand out the output parameters as actual json rather than just strings
"metric":"support: 0.077, mean_deviation: 3.325","match":"location=AUS, device=apple, version=v1" is really hard for them to pare right now

This is what the current output looks like
{"results":[{"matcher":{"version":"v3","location":"CAN"},"matchedOutlier":6.0,"matchedCount":20.0,"totalOutlier":6.0,"totalCount":1057.0,"support":1.0,"ratio":52.85}],"outliers":6.0,"numTotal":1057.0}

Coverage increased (+0.002%) to 94.034% when pulling 9f60396b8b0cd6784a1922aab7db874e3f418d20 on kexinrong:meanshift into 7c0ba6349f5a01150574faa39e5ae76cefc66f64 on stanford-futuredata:master.

Coverage increased (+0.002%) to 94.034% when pulling 56995d5ba63d4e4269383da64e2a05bdddcbc456 on kexinrong:meanshift into 7c0ba6349f5a01150574faa39e5ae76cefc66f64 on stanford-futuredata:master.

Coverage remained the same at 94.034% when pulling fcfc1a802b95e0ea16b7e10ece1eb92c863ae6d1 on kexinrong:meanshift into 6cc1a0b4b255e7af0a858cf3bfb5be7b2d3c8e66 on stanford-futuredata:master.

Command line output:
`Outlier Explanation:
metrics: mean_deviation=3.325, support=0.077
matches: location=AUS, device=apple, version=v1
aggregates: m1=20000.000, m2=4022500.000, count=100.000
`
Json output:
{"numTotal":1300.0,"results":[{"metric":{"mean_deviation":"3.325","support":"0.077"},"matcher":{"location":"AUS","device":"apple","version":"v1"},"aggregate":{"m1":"20000.000","m2":"4022500.000","count":"100.000"}}]}

Coverage remained the same at 94.034% when pulling 2f54454dd07d5d7abb467ab0f623468488e6d975 on kexinrong:meanshift into 6cc1a0b4b255e7af0a858cf3bfb5be7b2d3c8e66 on stanford-futuredata:master.


Fix IAE in low level routing table builder

Java's PriorityQueue throws IllegalArgumentException when given an
initial size of zero, this commit ensures we always give a minimum size
of one when calling the PriorityQueue constructor.

lgtm

lgtm

Current coverage is 46.15% (diff: 100%)

Merging #349 into master will decrease coverage by 0.03%

@@             master       #349   diff @@
==========================================
  Files           703        703
  Lines         33084      33085     +1
  Methods           0          0
  Messages          0          0
  Branches       4964       4964
==========================================
- Hits          15282      15272    -10
- Misses        16591      16598     +7
- Partials       1211       1215     +4

Powered by Codecov. Last update 831a642...ffd3ccb


refactor: raise error during init if masker is None for PermutationExplainer

Overview
Closes #3310
Description of the changes proposed in this pull request:

Raise ValueError earlier on during __init__ rather than during __call__. See #3310 for more context.

Checklist

[X] All pre-commit checks pass.
[X] Unit tests added (if fixing a bug or adding a new feature)

@connortann Let me know if you have any concerns in squeezing this into the upcoming release, it's a fairly innocuous change I think.


[NOT FOR MERGE] chat about tests

only a discussion to see what and how we should start adding more tests

@lebrice , @breuleux , This is not for merge, I would only like to have your inputs on what we should test first maybe, how the tests should be implemented and anything I might have missed? The objective here would be to have tests for everything with minimal / quick mocks where we can and local tests with personal account where it's complicated. I'll start adding tests with minimal mocks but let me know if you have any inputs to give


Update cost-logs.md

Updating the tables supported for MDC based on MDC FAQ docs - https://learn.microsoft.com/en-us/azure/defender-for-cloud/faq-defender-for-servers#what-data-types-are-included-in-the-daily-allowance-

@guywi-ms - can you review the proposed changes?
IMPORTANT: When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

#sign-off

#do-not-merge

#sign-off

Merging now


Failure to re-build a basebox

Environment
OSX 10.7.2
Ruby 1.8.7
Rubygems 1.8.12
VirtualBox 4.1.8
Gems
vagrant (0.8.10)
veewee (0.2.2)
virtualbox (0.9.2)
Commands
$ vagrant basebox define 'centos-57-64' 'CentOS-5.7-x86_64-netboot'
$ vagrant basebox build 'centos-57-64'

Ends fine, passes validation.
Then, when I edit something in the definition's postinstall.sh and run build again, I get this error:
$ vagrant basebox build 'centos-57-64'

Verifying the isofile CentOS-5.7-x86_64-netinstall.iso is ok.
Removing step [1] snapshot as it is no more valid
/Library/Ruby/Gems/1.8/gems/virtualbox-0.9.2/lib/virtualbox/com/implementer/ffi.rb:106:in `call_and_check': Error in API call to wait_for_completion:<PHONE_NUMBER> (VirtualBox::Exceptions::COMException)
	from /Library/Ruby/Gems/1.8/gems/virtualbox-0.9.2/lib/virtualbox/com/implementer/ffi.rb:80:in `call_vtbl_function'
	from /Library/Ruby/Gems/1.8/gems/virtualbox-0.9.2/lib/virtualbox/com/implementer/ffi.rb:61:in `call_function'
	from /Library/Ruby/Gems/1.8/gems/virtualbox-0.9.2/lib/virtualbox/com/abstract_interface.rb:145:in `call_function'
	from /Library/Ruby/Gems/1.8/gems/virtualbox-0.9.2/lib/virtualbox/com/abstract_interface.rb:62:in `wait_for_completion'
	from /Library/Ruby/Gems/1.8/gems/virtualbox-0.9.2/lib/virtualbox/com/interface/4.1.x/Progress.rb:39:in `wait'
	from /Library/Ruby/Gems/1.8/gems/virtualbox-0.9.2/lib/virtualbox/snapshot.rb:181:in `destroy'
	from /Library/Ruby/Gems/1.8/gems/virtualbox-0.9.2/lib/virtualbox/vm.rb:416:in `with_open_session'
	from /Library/Ruby/Gems/1.8/gems/virtualbox-0.9.2/lib/virtualbox/snapshot.rb:180:in `destroy'
	from /Library/Ruby/Gems/1.8/gems/veewee-0.2.2/lib/veewee/session.rb:836:in `transaction'
	from /Library/Ruby/Gems/1.8/gems/veewee-0.2.2/lib/veewee/session.rb:833:in `each'
	from /Library/Ruby/Gems/1.8/gems/veewee-0.2.2/lib/veewee/session.rb:833:in `transaction'
	from /Library/Ruby/Gems/1.8/gems/veewee-0.2.2/lib/veewee/session.rb:267:in `build'
	from /Library/Ruby/Gems/1.8/gems/veewee-0.2.2/lib/veewee/command.rb:46:in `build'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor/task.rb:22:in `send'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor/invocation.rb:109:in `send'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor/invocation.rb:109:in `invoke'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor.rb:205:in `basebox'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor/task.rb:22:in `send'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
	from /Library/Ruby/Gems/1.8/gems/thor-0.14.6/lib/thor/base.rb:389:in `start'
	from /Library/Ruby/Gems/1.8/gems/vagrant-0.8.10/bin/vagrant:26
	from /usr/bin/vagrant:19:in `load'
	from /usr/bin/vagrant:19

Trying to restore to the snapshot in the GUI produces this error:
Failed to restore the snapshot 1-postinstall.sh-4373d263c16c1317d798a0c3dc6c9cf0 of the virtual machine centos-57-64.

Could not open the medium '/Users/michael/VirtualBox VMs/centos-57-64/Snapshots/{561567b3-5678-49a9-b646-070285a9db16}.vdi'.

VD: error VERR_FILE_NOT_FOUND opening image file '/Users/michael/VirtualBox VMs/centos-57-64/Snapshots/{561567b3-5678-49a9-b646-070285a9db16}.vdi' (VERR_FILE_NOT_FOUND).

Result Code: NS_ERROR_FAILURE (0x80004005)
Component: Medium
Interface: IMedium {53f9cc0c-e0fd-40a5-a404-a7a5272082cd}

Trying to remove, restore, just recover anything isn't working.
Contents of relevant directories:
$ ll -R /Users/michael/VirtualBox\ VMs/centos-57-64/
total 2773192
drwxr-xr-x  5 michael  staff         170 Dec 20 23:04 Logs
drwxr-xr-x  7 michael  staff         238 Dec 20 23:18 Snapshots
-rw-------  1 michael  staff       24868 Dec 20 23:21 centos-57-64.vbox
-rw-------  1 michael  staff       24868 Dec 20 23:20 centos-57-64.vbox-prev
-rw-------  1 michael  staff<PHONE_NUMBER> Dec 20 22:48 centos-57-64.vdi

/Users/michael/VirtualBox VMs/centos-57-64//Logs:
total 456
-rw-------  1 michael  staff  73878 Dec 20 23:07 VBox.log
-rw-------  1 michael  staff  74697 Dec 20 23:04 VBox.log.1
-rw-------  1 michael  staff  76109 Dec 20 22:48 VBox.log.2

/Users/michael/VirtualBox VMs/centos-57-64//Snapshots:
total 3838704
-rw-------  1 michael  staff    67322034 Dec 20 22:48 2011-12-21T03-48-40-466570000Z.sav
-rw-------  1 michael  staff   132149800 Dec 20 23:04 2011-12-21T04-04-17-546543000Z.sav
-rw-------  1 michael  staff       45056 Dec 20 23:18 {112c0252-9c6e-4fe3-9c34-7165923feb8c}.vdi
-rw-------  1 michael  staff<PHONE_NUMBER> Dec 20 23:10 {2780d06e-c5ba-494c-ac97-dd5f29b5f8f2}.vdi
-rw-------  1 michael  staff       45056 Dec 20 23:17 {7dc49450-5bf1-4a9c-8c41-0d28f8f27dba}.vdi

I cannot figure out how to recover from this state - trying many different ways, but may have to resort to destroying and starting over completely.

What is your host OS? Guessing something ffi-related .. try
yum install libffi-devel ruby-devel rubygem-ffi
Also, do you get any dialog boxes that pop up when building templates, at first boot? If so you need to suppress them so that they don't pop up in the background and prevent clean boots when restoring snapshots. Try and add this patch and see if it helps.


cannot stat /data/history/.well-known/stellar-history.json

Keep getting cp: cannot stat '/data/history/.well-known/stellar-history.json': No such file or directory for every job
Is it expected?

I also see this message. I'm not exactly sure where it comes from but it works as expected.


activity header with breadcrumb

on the project page, users see activities on the canvas
once an activity is clicked, the user goes to the activity page

[ ] on the activity page, the user sees an activity header, listing the name of the activity, and parent activities (breadcrumb)
[ ] the user can navigate by clicking on the breadcrumb

To be investigated: using an ES query to fetch the breadcrumbs (performance)

I propose to hide, or gray out, or display a message when clicking the activity creation buttons once the user reaches the fifth activity level @Stafeeva feel free to try things out


Fix navigating within docs page not saving history

Fixes #82293
Clicking links withing docs which point to the same page didn't save navigation history.

#63515 seems to do generally the same thing


[EPIC] Add OCI Reference Type Support

Add OCI reference type support based on latest additions to the opencontainers/distribution-spec. This will enable both existing ORAS referrers support as an extension as well as first class OCI referrers API.

[ ] #21
[ ] #22
[ ] #23

Optional:

[ ] #25

@wangxiaoxuan273 Let's follow up this EPIC.

Sure!


device offline causes exception, causing Homebridge to try to reboot repeatedly

Describe The Bug:
I have a thermostat that is offline (due to a renovation).  This is causing an exception, which means that Homebridge is in a continuous loop, trying to re-start.
To Reproduce:
Take any Daikin One thermostat offline.
Expected behavior:
The offline thermostat should be ignored.
Logs:
[6/20/2024, 5:19:34 PM] [Daikin] Error with getRequest: https://api.daikinskyport.com/deviceData/my-device-id
[6/20/2024, 5:19:34 PM] [Daikin] Error with response:
[6/20/2024, 5:19:34 PM] [Daikin] { message: 'DeviceOfflineException' }
[6/20/2024, 5:19:34 PM] [Daikin] 400
[6/20/2024, 5:19:34 PM] [Daikin] Object [AxiosHeaders] {
  date: 'Fri, 21 Jun 2024 00:19:34 GMT',
  'content-type': 'application/json',
  'content-length': '36',
  connection: 'keep-alive',
  'apigw-requestid': 'ZsQLhg_6PHcEMSw='
}
[6/20/2024, 5:19:34 PM] [Daikin] Unable to retrieve data for West Wing.
[6/20/2024, 5:19:34 PM] [Daikin] Error with getRequest: https://api.daikinskyport.com/deviceData/my-device-id
[6/20/2024, 5:19:34 PM] [Daikin] Error with response:
[6/20/2024, 5:19:34 PM] [Daikin] { message: 'DeviceOfflineException' }
[6/20/2024, 5:19:34 PM] [Daikin] 400
[6/20/2024, 5:19:34 PM] [Daikin] Object [AxiosHeaders] {
  date: 'Fri, 21 Jun 2024 00:19:34 GMT',
  'content-type': 'application/json',
  'content-length': '36',
  connection: 'keep-alive',
  'apigw-requestid': 'ZsQLijmtvHcEMBw='
}
[6/20/2024, 5:19:34 PM] TypeError: Cannot read properties of undefined (reading 'aqOutdoorAvailable')
    at DaikinOnePlusPlatform.discoverOutdoorAqi (/homebridge/node_modules/homebridge-daikin-oneplus/src/platform.ts:365:22)
    at DaikinOnePlusPlatform.discoverDevices (/homebridge/node_modules/homebridge-daikin-oneplus/src/platform.ts:161:12)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /homebridge/node_modules/homebridge-daikin-oneplus/src/platform.ts:114:9

Environment:

Plugin Version: 3.2.0
Homebridge Version: 1.7.0
Node.js Version: 20.14.0
Operating System: Docker

@garyhooper Thanks for the bug report. The next update will fix this without requiring you to ignore those sensors.


Set up Nephio cloud as test environment

Nephio Cloud as target test environment

cluster and network topology
set up of IP address pools for each clusters
VLAN for secondary interface segregation
continuous running test environment (for two weeks before release) on Google cloud (Nephio account)
IP address assignment to externally accessible service (such as EdgeWatcher)

For now, we have implemented two different approaches in test-infra project.

ONE summit approach (Enabled) - Deploys a 'static' management and workload infrastructure with Ansible playbooks created in the ONE summit repo. This approach has been tested, but eventually will be deprecated.
Cluster API approach (Disabled) - Deploys the management cluster only and workloads will be requested as Cluster API CRs. There is work on progress on this approach.

https://github.com/nephio-project/test-infra/tree/main/e2e/provision#quick-start-for-gce


Map TWAP (createWithContext call) orders

Summary
We currently display TWAP (createWithContext) calls as a "standard" transaction and do not decode the data as we do with swaps. This implements TWAP-specific decoding behind a feature flag.
Official TWAP-based orders are now decoded and the txInfo is mapped as follows:
type TwapOrderInfo = {
  type: 'TwapOrder'
  orderStatus: OrderStatus;
  kind: 'sell';
  class: 'limit';
  validUntil: number;
  sellAmount: string;
  buyAmount: string;
  executedSellAmount: string;
  executedBuyAmount: string;
  sellToken: {
      address: `0x${string}`,
      decimals: number,
      logoUri: string,
      name: string,
      symbol: string,
      trusted: boolean,
  };
  buyToken: {
      address: `0x${string}`,
      decimals: number,
      logoUri: string,
      name: string,
      symbol: string,
      trusted: boolean,
  };
  receiver: `0x${string}`;
  owner: `0x${string}`;
  numberOfParts: number;
  partSellAmount: string;
  minPartLimit: string;
  timeBetweenParts: string;
  durationOfPart:
    | { durationType: 'AUTO' }
    | { durationType: 'LIMIT_DURATION'; duration: number };
  startTime:
    | { startType: 'AT_MINING_TIME }
    | { startType: 'AT_EPOCH'; epoch: number };
}

Changes

Add features.twapsDecoding feature flag
Extract re-used values from Order entity to relative enums
Add TwapOrderInfo entity
Add TransactionInfoType.TwapOrder type
Add test-covered GPv2OrderHelper for decoding order UIDs (based on CoW Protocol/SDK - linked in code)
Add test-covered TwapOrderHelper for finding/generating parts of TWAP orders (based on CoW Swap app - linked in code)
Add test-covered TwapOrderMapper for mapping TWAP orders

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

91 of 172 (52.91%)  changed or added relevant lines in 9 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.1%) to 49.295%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

src/routes/transactions/helpers/swap-order.helper.ts
3
4
75.0%

src/routes/transactions/helpers/gp-v2-order.helper.ts
8
11
72.73%

src/routes/transactions/helpers/twap-order.helper.ts
10
23
43.48%

src/routes/transactions/mappers/common/transaction-info.mapper.ts
5
18
27.78%

src/routes/transactions/entities/swaps/twap-order-info.entity.ts
31
51
60.78%

src/routes/transactions/mappers/common/twap-order.mapper.ts
18
49
36.73%

Totals

Change from base Build<PHONE_NUMBER>:
-0.1%

Covered Lines:
4068

Relevant Lines:
6656

💛  - Coveralls

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

91 of 174 (52.3%)  changed or added relevant lines in 10 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.1%) to 49.274%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

src/routes/transactions/helpers/swap-order.helper.ts
3
4
75.0%

src/domain/swaps/contracts/decoders/composable-cow-decoder.helper.ts
0
2
0.0%

src/routes/transactions/helpers/gp-v2-order.helper.ts
8
11
72.73%

src/routes/transactions/helpers/twap-order.helper.ts
10
23
43.48%

src/routes/transactions/mappers/common/transaction-info.mapper.ts
5
18
27.78%

src/routes/transactions/entities/swaps/twap-order-info.entity.ts
31
51
60.78%

src/routes/transactions/mappers/common/twap-order.mapper.ts
18
49
36.73%

Totals

Change from base Build<PHONE_NUMBER>:
-0.1%

Covered Lines:
4068

Relevant Lines:
6658

💛  - Coveralls


RHMAP-21086 - Upgrade libs

JIRA:
https://issues.jboss.org/browse/RHMAP-21086
WHAT:

Upgrade fh-logger to 1.0.0
Upgrade fh-cachekey-client to 0.4.3

WHY:

Get fixes/changes from the latest version for the next release

HOW:

Run npm install --save --save-exact <dep>@<version>

Blocked:
Waiting for the new version of the lib fh-mbaas-client": "1.1.4",

Coverage remained the same at 74.948% when pulling 00019c5b51b6302d9a8c17f5df558ce783d07402 on camilamacedo86:RHMAP-21086 into ad367022e0aa03f7991576506aee175451318dfc on feedhenry:master.

Coverage remained the same at 74.948% when pulling 00019c5b51b6302d9a8c17f5df558ce783d07402 on camilamacedo86:RHMAP-21086 into ad367022e0aa03f7991576506aee175451318dfc on feedhenry:master.

@davidffrench remove the lib which was blocking this PR. Next release we roll out the changes on this one.

It should be ignored.


git_super_status appears twice on cli

Hi all,
I'm not sure if this may be default behaviour or not but the git_super_status prompt appears twice in my terminal when using it. Once at the start of the line and then again at the end, like so
➜  my_repo (master|✔)                                                                                (master✔)

my theme config looks like
PROMPT="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT+=' %{$fg[cyan]%}%c%{$reset_color%} $(git_super_status) '

Does anyone know how I can change this so that it only appears once in the terminal?

The right part of the prompt is defined by the $RPROMPT env variable. Could you check it?


Update documentation

Pending update documentation with authentication rules.

Shows properties error in Swagger.
CORS error

Resolved in sprint-10


Uses first tab on feature info panel

This MR adjusts the FeaturInfoTabs to always use first tab when a new feature info is triggered.
@terrestris/devs please review

:tada: This PR is included in version 6.13.1 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


dbeaver treats PostgreSQL array slice bound as a binding parameter

System information:

DBeaver version 8ec205926e

Connection specification:

Database name and version PostgreSQL 11.2

Describe the problem you're observing:
DBeaver treats [:colname] as a binding parameter in SQL editor whereas it is array slicing with omitted lower bound.
Steps to reproduce, if exist:
select tgrelid::regclass, (regexp_split_to_array(encode(tgargs, 'escape'), '\\000'))[:tgnargs] args
from pg_catalog.pg_trigger

Fixed ('[: ]' is a special case)

verified


Support thrift uuid type

The latest thrift version has added support for the uuid type.

is anyone working on this？
by the way， what is the difference between pilota and  Official Rust Thrift library?

Hello, seems there's nobody working on this now.
Pilota is compatible with the official thrift syntax (except uuid which is not implemented now) for the time being. But pilota provides far more ability than the official rust thrift library with much better support for Rust.
For example, pilota has strong extensibility with its plugin system and we use Bytes and FastStr to implement zero-copy by default.
Furthermore, we have also carried out in-depth optimization.

Thanks for your patience！
I'd like to have a try.

I found that thrift protocol in pilota already  implement functions related to uuid like write_uuid.
The current implementation is based on [u8; 16]. There are some third-party libraries providing encapsulated structure like uuid::Uuid which offers some user-friendly functions.
Is it better to import such library ？ or just keep raw [u8; 16]？

Hello, I don't think we should import and use another library in pilota since they are not std and there's various uuid implementations and we don't know which one meets user's demand.

The codec part has been implemented, but the parser does not support this type now. Are you interested in implement this type in the parser?

The codec part has been implemented, but the parser does not support this type now. Are you interested in implement this type in the parser?

Get it.


Add support for ratatui  0.21.0

This PR updates dependency for new ratatui version.
Additionally, based on ratatui-suppport feature it switches usage of deprecated Spans struct to Line. For that rather hacky way of handling API differences was required to make it possible, but it gets rid of deprecation warnings during compilation for ratatui support.

Thanks for the PR and I have come up with similar workarounds using cfg(). Unfortunately in parallel I have updated the same plus made demo.rs compatible to both.
For tui
cargo run --example demo

and ratatui
 cargo run --example demo --no-default-features -F ratatui-support,ratatui/termion

No problem, I'm waiting for new version on crates.io then to allow me to proceed with ratatui version update.


fixed swift 4.0 compile error.

I have migrated the project to 4.2 :) Thanks for your contribution!


Multiple definitions of main when updating to LVGL 7.3.1

When I use LVGL 7.3.1 in the simulator I get a build error saying there are multiple definitions of main.
From what I can tell this is due to the "file(GLOB_RECURSE ...)" in the CMakeLists.txt file.
I can't figure out a way to fix this.
./build/CMakeFiles/feature_tests.o: In function `main':
/home/bfonseca/GitHub/lv_sim_eclipse_sdl_master/Debug/../build/CMakeFiles/feature_tests.c:34: multiple definition of `main'
./build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.o:/home/bfonseca/GitHub/lv_sim_eclipse_sdl_master/Debug/../build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c:574: first defined here
./main.o: In function `main':
makefile:156: recipe for target 'lv_sim_eclipse_sdl' failed
/home/bfonseca/GitHub/lv_sim_eclipse_sdl_master/Debug/../main.c:51: multiple definition of `main'
./build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.o:/home/bfonseca/GitHub/lv_sim_eclipse_sdl_master/Debug/../build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c:574: first defined here
collect2: error: ld returned 1 exit status
make: *** [lv_sim_eclipse_sdl] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

In my CMakeLists.txt file I have:

cmake_minimum_required(VERSION 3.10)
project(lvgl)
set(CMAKE_C_STANDARD 11)#C11
set(CMAKE_CXX_STANDARD 17)#C17
set(CMAKE_CXX_STANDARD_REQUIRED ON)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})
file(GLOB_RECURSE INCLUDES "lv_drivers/.h" "lv_examples/.h"  "lvgl/.h"  "./.h" "my_project/.h")
file(GLOB_RECURSE SOURCES  "lv_drivers/.c" "lv_examples/.c"  "lvgl/.c" "my_project/*.c")
file(REMOVE_ITEM SOURCES "Debug/../build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c")
file(REMOVE_ITEM SOURCES "/home/bfonseca/GitHub/lv_sim_eclipse_sdl_master/Debug/../build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c")
list(REMOVE_ITEM INCLUDES ${REMOVE_GLOB})
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
find_package(SDL2 REQUIRED SDL2)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(main main.c mouse_cursor_icon.c ${SOURCES} ${INCLUDES})
target_link_libraries(main PRIVATE SDL2 )
add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main)

I added these lines in hope to fix this, but it didn't.

file(REMOVE_ITEM SOURCES "Debug/../build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c")
file(REMOVE_ITEM SOURCES "/home/bfonseca/GitHub/lv_sim_eclipse_sdl_master/Debug/../build/CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c")

My experience with CMake is very small so I am not sure what else I should do/try.
From what I've read listing files manually is the best practice instead of using GLOB. Guessing this isn't exactly viable.

Solved by adding
file(GLOB_RECURSE REMOVE_CMAKE "build/CMakeFiles/*")
list(REMOVE_ITEM SOURCES ${REMOVE_CMAKE})

after the file(GLOB_RECURSE SOURCES ...) call

@BFFonseca So is it required to fix it in the simulator's CMakeLists file?

Great! Thank for the feedback!


[in_app_purchase][android]: Playstore upload fails with "We've detected this app uses an unsupported version of Play billing. Please upgrade to Billing Library version 4 or newer to publish this app."

Use case
I am using the In-app purchase library with the latest version of the library "in_app_purchase: ^3.0.7" but when I am trying to upload a new bundle on the Play store at that time, It throws an error as below.
"We've detected this app uses an unsupported version of Play billing. Please upgrade to Billing Library version 4 or newer to publish this app."

Proposal

Play store console:

Can anyone please help me to resolve this quickly?
Your quick response is highly appreciated
Thanks in Advance!

Hi @pshukla0506, can you share the version of in_app_purchase_android you're using? (You can find this in your pubspec.lock)
Please also share your AndroidManifest.xml and if possible, what your merged manifest looks like. You can see this by opening the AndroidManifest.xml file in Android Studio and clicking on merged manifest.
Please also provide the output of flutter doctor -v.
Thank you

Hi @pshukla0506, can you share the version of in_app_purchase_android you're using? (You can find this in your pubspec.lock)
Please also share your AndroidManifest.xml and if possible, what your merged manifest looks like. You can see this by opening the AndroidManifest.xml file in Android Studio and clicking on merged manifest.
Please also provide the output of flutter doctor -v.
Thank you

Hi @danagbemava-nc
Version information:

Hi @pshukla0506, can you share the version of in_app_purchase_android you're using? (You can find this in your pubspec.lock)
Please also share your AndroidManifest.xml and if possible, what your merged manifest looks like. You can see this by opening the AndroidManifest.xml file in Android Studio and clicking on merged manifest.
Please also provide the output of flutter doctor -v.
Thank you

Hi @danagbemava-nc
Please find the required details.
Version information:
in_app_purchase_android:
    dependency: transitive
    description:
      name: in_app_purchase_android
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.2.2+6"

AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="seem.hk">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="https" />
        </intent>
        <intent>
            <action android:name="android.intent.action.DIAL" />
            <data android:scheme="tel" />
        </intent>
        <intent>
            <action android:name="android.intent.action.SENDTO" />
            <data android:scheme="smsto" />
        </intent>
    </queries>

    <application
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher"
        android:label="Seem">
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:exported="true"
            android:hardwareAccelerated="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
                android:name="io.flutter.embedding.android.NormalTheme"
                android:resource="@style/NormalTheme" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />

        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/ic_launcher" />

       <!-- <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/colorPrimary" />
-->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_channel_id"
            android:value="seem" />
        <!--Live-->
        <!--<meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-8655226367611360~6686542015" />-->
        <!--Test-->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-2775167923660951~8963955336" />
    </application>
</manifest>

Hi @pshukla0506, kindly run flutter pub upgrade to upgrade your in_app_purchase_android. The latest version is 0.2.3+3 and the in_app_purchase_android plugin was updated to play billing 5 in 0.2.3. After upgrading, please try uploading the appbundle again and feedback on whether or not it is accepted.
Thank you

Thanks @danagbemava-nc It is working now.


Upgrade to a newer version of jaxb-xjc

The version used on the tutorial is old and the new ones introduce a few problems so I guess this needs a update.

same here. after I run ./mvnw clean compile, the code generation failed. and I tried with gradle as well, still the same.
error message:
FAILURE: Build failed with an exception.

* Where:
Build file 'E:\samples\gs-consuming-web-service\complete\build.gradle' line: 36

@sc-yan
I have same problem. how did you solve this problem?
./gradlew compileJava

> Task :genJaxb
[ant:xjc] [ERROR] Connection refused: connect
[ant:xjc] unknown location
[ant:xjc]

> Task :genJaxb FAILED

FAILURE: Build failed with an exception.

* Where:
Build file '\path\to\gs-consuming-web-service\complete\build.gradle' line: 36

* What went wrong:
Execution failed for task ':genJaxb'.
> java.lang.NullPointerException

@kubota-akihiro  kind of forgot what I did but I think I didn't solve it. seems like jaxb-xjc is not easy to use. I decided to use this library to parse XML at last.
not sure what your problem is but hope it helps.

Guys please refer to the guideline for solve the genJaxb issue. https://spring.io/guides/gs/consuming-web-service/#_run_the_target_web_service_locally It required to start the web service of server side only can run.

@jimmywshee  your link is not referring to any issue. could you double check?

Updated the link issue.. suppose it can helped to solved jaxb tooling issue

We're going to rewrite this guide soon. I'll leave this issue open, though, as a reminder of something to check when we do the rewrite. Paging @gregturn


applying endpoint configuration in quick succession fails

Due to changes made in https://github.com/cilium/cilium/pull/3043 , which fixed some issues found in https://github.com/cilium/cilium/pull/3040, applying endpoint configuration updates in quick succession caused some build failures:
Test failure on Jenkins:
23:33:30 Summarizing 1 Failure:
23:33:30
23:33:30 [Fail] RuntimeValidatedConntrackTable [It] Testing L3-L4-L7 policy while the L3-L4 connection was previously made to confirm L3-L4-L7 policy enforcement over the proxy with the same source port
23:33:30 /home/jenkins/workspace/Cilium-PR-Ginkgo-Tests-Validated/src/github.com/cilium/cilium/test/runtime/ct.go:627
23:33:30
23:33:30 Ran 55 of 267 Specs in 3055.116 seconds
23:33:30 FAIL! -- 54 Passed | 1 Failed | 0 Pending | 212 Skipped --- FAIL: TestTest (3055.13s)

More specifically:
22:51:51 • Failure [41.844 seconds]
22:51:51 RuntimeValidatedConntrackTable
22:51:51 /home/jenkins/workspace/Cilium-PR-Ginkgo-Tests-Validated/src/github.com/cilium/cilium/test/runtime/ct.go:53
22:51:51   Testing L3-L4-L7 policy while the L3-L4 connection was previously made to confirm L3-L4-L7 policy enforcement over the proxy with the same source port [It]
22:51:51   /home/jenkins/workspace/Cilium-PR-Ginkgo-Tests-Validated/src/github.com/cilium/cilium/test/runtime/ct.go:617
22:51:51
22:51:51   Setting 13233 endpoint's EgressPolicy as false
22:51:51   Expected
22:51:51       <bool>: false
22:51:51   to be true
22:51:51
22:51:51   /home/jenkins/workspace/Cilium-PR-Ginkgo-Tests-Validated/src/github.com/cilium/cilium/test/runtime/ct.go:627

From the logs:
level=debug msg="running command: sudo cilium endpoint list -o jsonpath='{range [?(@.labels.orchestration-identity[0]!=\"reserved:health\")]}{<EMAIL_ADDRESS>cmd: "sudo cilium endpoint list -o jsonpath='{range [?(@.labels.orchestration-identity[0]!=\"reserved:health\")]}{<EMAIL_ADDRESS>exitCode: 0
 server-2=13233
server-3=13628
client-2=17471
netcat=29140
server=38593
client=50640

level=debug msg="running command: sudo cilium endpoint config 13233 IngressPolicy=false"
cmd: "sudo cilium endpoint config 13233 IngressPolicy=false" exitCode: 0
 Endpoint 13233 configuration updated successfully

level=debug msg="running command: sudo cilium endpoint config 13233 EgressPolicy=false"
cmd: "sudo cilium endpoint config 13233 EgressPolicy=false" exitCode: 1
 Error: Cannot update endpoint 13233: [PATCH /endpoint/{id}/config][500] patchEndpointIdConfigFailed  unable to regenerate endpoint program because state transition to waiting-to-regenerate was unsuccessful; check `cilium endpoint log 13233` for more information

This is directly due to a change caused by https://github.com/cilium/cilium/pull/3043 , in which we check the result of state changes upon configuration updates.

I don't really see another way of fixing this quickly apart from changing the following function in pkg/endpoint/endpoint.go
func (e *Endpoint) Update(owner Owner, opts models.ConfigurationMap) error {

from
	if needToRegenerate {
		stateTransitionSucceeded := e.SetStateLocked(StateWaitingToRegenerate, reason)

		e.Mutex.Unlock()
		ctCleaned.Wait()

		if stateTransitionSucceeded {
			e.Regenerate(owner, reason)
			return nil
		}

		return fmt.Errorf("unable to regenerate endpoint program because state transition to %s was unsuccessful; check `cilium endpoint log %d` for more information", StateWaitingToRegenerate, e.ID)
	}

to this:
	if needToRegenerate {
		stateTransitionSucceeded := e.SetStateLocked(StateWaitingToRegenerate, reason)

		e.Mutex.Unlock()
		ctCleaned.Wait()
		e.Regenerate(owner, reason)
		return nil
	}

But, on the discussion in https://github.com/cilium/cilium/pull/3043, we decided to explicitly make such a check. Maybe in the CI, when we make subsequent configuration updates, we should wait for endpoints to be in ready state before rapidly applying such updates?


write: a collection of generic interfaces

Use Case
Currently the Write API has the methods.
func (c *Client) WriteData(ctx context.Context, points ...interface{}) error { ... }

and
func (c *Client) WriteDataWithOptions(ctx context.Context, options *WriteOptions, points ...interface{}) error {...}

It would also be useful to be able to write batches/collections of a generic interface type.
Expected behavior
When I've a collection of objects of a local type, I would like to write them in one call using the points ...inteface{} idiom.
Actual behavior
Currently this requires repeated calls, in a loop to one of the methods mentioned under Use Case
Additional info
I've made  a simple sequential implementation of this locally.
func WriteBatchDataSeq[T any](client *influxdb3.Client,
	ctx context.Context,
	opts *influxdb3.WriteOptions,
	ifaces []T) error {

	for _, iface := range ifaces {
		fmt.Printf("%s %v\n", reflect.TypeOf(iface).Kind().String(), iface)
		err := client.WriteDataWithOptions(ctx, opts, iface)
		if err != nil {
			return err
		}
	}
	return nil
}

Only as a reminder
werr := client.WriteDataWithOptions(context.Background(), &wopts, []interface{})

... throws error like...
error encoding point: cannot use []main.Nautilus as point

and
werr := client.WriteDataWithOptions(context.Background(), &wopts, []interface{})

...throws error like...
error encoding point: cannot use []*main.Nautilus as point

@thulasirajkomminar thanks for clarify your interesting, we will prioritise this issue.
Is this something you would be willing to help with? All PR is welcome and we will be happy to review your submission.

@thulasirajkomminar thanks for clarify your interesting, we will prioritise this issue.
Is this something you would be willing to help with? All PR is welcome and we will be happy to review your submission.

I think @karel-rehor already made some commits for this https://github.com/InfluxCommunity/influxdb3-go/compare/feat/writeIfaceArray

User can use client.WriteData(ctx, points...) when the collection of annotated structs is a []interface{} slice. If there is a need to keep the points in strongly typed slice, conversion to slice of interfaces is straightforward.
I'm for closing this with wontfix label. Other opinions?

User can use client.WriteData(ctx, points...) when the collection of annotated structs is a []interface{} slice. If there is a need to keep the points in strongly typed slice ([]T), conversion to slice of interfaces is straightforward.

@alespour nice hint 👍

I'm for closing this with wontfix label. Other opinions?

I agree

@bednar @alespour I created my own function to convert my custom slice to slice of any so I think the issue can be closed.


Odd interaction between eval-at-mark and vim-repeat

Howdy!
Ran into this while running conjure-school: At lesson 5, when I attempt to invoke the evaluate-at-mark command, I type <LL>em and before I can supply the mark, some evaluation happens immediately. This string gets inlined at the cursor position:
ilent! call repeat#set('\em', v:count)

In gif form:

If difficult to reproduce, I can come up with a minimal init.vim.
Cheers!

Fixed this bug on develop! Thank you for pointing it out, so sorry it impacted your ConjureSchool :disappointed: that's the literal worst time for this sort of thing to happen. Just having a poke around to see how hard it would be to get vim-repeat actually repeating your "eval at mark" with the mark you selected.

Did it :slightly_smiling_face: so you can now use eval at mark again and it actually works with vim-repeat. Releasing!

Thanks a ton!


Feature: Provide infrastructure to popular libraries

React, Angular, Vue (etc..) structure could be managed using this repo.

Do you mean file system structure?

No, like a way to tweak a frontend structure. Such as folder structure.


seems that current db is out of date

How often the site database is updated?

Hi Dan, any chance of getting the database updated? Looks like it's been quite a while if this issue is still open and places that I know are using open table aren't being found in searches.
I looked into just forking the repo and hosting it myself but I'm not part of the affiliate program so don't have access to download anything.
Cheers

I also would love if you updated the database soon.
Thanks.

i dont know what to tell you guys, but OT has stopped updating affiliate data source. last update
to the XLS files was in mid-october 2014. even with that last update it looks like international
data was pulled from the source, only few countries are available right now. this is def a bad news
so i might just keep the current snapshot as is.


GUI polish. Playback time bug fixes. Additional playback controls. Begin finalizing code formatting.

There are quite a lot of changes here. Firstly, I polished/reorganized some of the playback and model controls. Added an indicator for which animation is active. Added play all button. Added pause all button. Made all range type inputs consistent in styling. Added input box for range type controls to allow the user to type a value (like the prototype visualizer). Added 'pages' for the playback controls section. Added an image for the main play pause button. Began formatting code in 'controls'.

I got an idea that might be cool. What if when the mouse moves off of the window that selects the colors and textures the menu auto hides?

@kylefinter I think that would be quite nice. I'll try to get that added to this pull request.

I'm working on keeping the transparency and color to save their state to an internal object. Then I'll make a commit on this branch to keep it in the same pull request.


Suggestion - discord commands to pull info

commands to pull info such as leaderboard at any time instead of waiting for the interval (such as !leaderboard or !connectedplayers etc)

I follow this Feature Request


Podman + Portainer Business Edition???

Hi there. This might be more of a podman issue than a portainer one, but I saw more discussion about it here (#2991)
When using the commands available at the bottom of the above referenced bug report, portainer-ce downloads and runs just fine (in rootless) but switching the single letter to portainer-ee gives the following:
Trying to pull docker.io/portainer/portainer-ee:latest...   manifest unknown: Failed to fetch "latest" from request "/v2/portainer/portainer-ee/manifests/latest". Error: Error initializing source docker://portainer/portainer-ee:latest: Error reading manifest latest in mirror.gcr.io/portainer/portainer-ee: manifest unknown: Failed to fetch "latest" from request "/v2/portainer/portainer-ee/manifests/latest".
Wondering if I'm missing something silly or if this is a known incompatibility.
Thanks.
Technical details:

Portainer version: latest
Target Docker version (the host/cluster you manage): podman 3.0.1 (debian repos version)
Platform (windows/linux): Debian 11
Command used to start Portainer (docker run -p 9443:9443 portainer/portainer): podman run -d -p 9443:9443   -p 8000:8000 -p 9000:9000  --security-opt label=disable   --name=portainer   --restart=always   -v /run/user/$(id -u)/podman/podman.sock:/var/run/docker.sock:Z   -v portainer_data:/data  portainer/portainer-ee:latest
Target Swarm version (if applicable): n/a
Browser: Google Chrome

can you check if you can pull the image? portainer/portainer-ee:latest exists


fix #172, don't crash on empty name string on call to LookupTerminfo

On Windows 10, LookupTerminfo(name string) in terminfo.go was getting passed an empty string, then crashing on name[0] being out of bounds.

Thanks. This looks good.
On Sun, Dec 31, 2017 at 2:06 PM Jason E. Aten, Ph.D. <
<EMAIL_ADDRESS>wrote:

On Windows 10, LookupTerminfo(name string) in terminfo.go was getting
passed an empty string, then crashing on name[0] being out of bounds.
You can view, comment on, or merge this pull request online at:
https://github.com/gdamore/tcell/pull/181
Commit Summary

fix #172, don't crash on empty name string on call to LookupTerminfo

File Changes

M terminfo/terminfo.go
https://github.com/gdamore/tcell/pull/181/files#diff-0 (6)

Patch Links:

https://github.com/gdamore/tcell/pull/181.patch
https://github.com/gdamore/tcell/pull/181.diff

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/gdamore/tcell/pull/181, or mute the thread
https://github.com/notifications/unsubscribe-auth/ABPDfYO1L54tsf7jylAaXYKyxpoCJj1hks5tGAV3gaJpZM4RP8Wx
.