我有一个使用Apache Ignite作为单节点集群的应用程序。也就是说,Ignite由应用程序启动和停止,并且其生命周期与应用程序匹配。
Ignite缓存同时启用了持久存储和直读。因此,
CacheAdapter
读取到后备存储(Oracle数据库)并将条目加载到缓存中。所有这些似乎都工作得很好。这是我的问题:有时(经常)在应用程序退回或重新部署时,就Apache Ignite而言,持久性存储data
目录保持锁定。结果,Ignite静默创建了一个新的空持久存储,这破坏了持久存储的全部目的。
我们的数据目录当前看起来像这样:
-sh-4.2$ pwd
/myapp/oracle/user_projects/domains/myapp_inst/igniteCache/myserver/data
-sh-4.2$ ls -ltr
total 48
drwxr-x---. 10 mygroup mygroup 4096 Jan 9 16:25 node00-7c02d9ab-7ef3-4d01-8ebd-d1184fa281a2
drwxr-x---. 10 mygroup mygroup 4096 Jan 9 17:28 node01-06a5d059-1b62-4ac2-84bf-5325deac8138
drwxr-x---. 10 mygroup mygroup 4096 Feb 4 15:39 node02-ba720d52-570a-448c-9109-75687ee664e7
drwxr-x---. 10 mygroup mygroup 4096 Feb 5 12:16 node03-d2c521aa-e0ee-471b-ad16-08af382a1e3d
drwxr-x---. 10 mygroup mygroup 4096 Feb 6 17:44 node04-505e754e-a3d3-48b1-a759-d5ec8867dc96
drwxr-x---. 10 mygroup mygroup 4096 Feb 6 18:23 node05-ec0f89e3-bfe5-4bb6-87da-302951439f66
drwxr-x---. 10 mygroup mygroup 4096 Feb 13 15:41 node06-5b9dc33a-42f6-4f1c-8d57-14d5ddb30dc5
drwxr-x---. 10 mygroup mygroup 4096 Feb 13 15:43 node07-47aacde5-2598-4a85-9383-761e569bb1d1
drwxr-x---. 10 mygroup mygroup 4096 Feb 13 15:47 node08-0374a51d-4b90-4e5a-9465-adabc900ea0b
drwxr-x---. 10 mygroup mygroup 4096 Feb 13 15:52 node09-610c69c6-35e0-4d74-90db-6be09bb77659
-rw-r-----. 1 mygroup mygroup 41 Feb 13 17:00 lock
drwxr-x---. 10 mygroup mygroup 4096 Feb 13 17:00 node10-f115d95b-7b76-41e0-bd32-966030331c9c
上面应该只有一个“ nodeXX ...”目录。
问题
确实,我可以采取任何措施来解决此问题。
请设置Ignite ConsistentId:igniteCfg.setConsistentId(“ My_Node_Id” + id);https://apacheignite.readme.io/docs/distributed-persistent-store#section-persistence-path-management
在这种情况下,ignite将尝试获取文件锁定并等待10秒钟,如果无法获取它,则不会创建新文件夹,但会失败,但会出现异常。