ARTIFACTORY:如何解决复制失败后出现“Failed to acquire lock for…”错误的问题
Artifactory支持库中复制在两个Artifactory实例之间,以支持分布在遥远地理位置的不同团队的开发。
在工件同步过程中,Artifactory将首先在数据库中“锁定”工件,并将此“锁定”信息记录到数据库的distributed_locks表中。当工件上的操作完成后,“锁”信息将被自动删除。
但是此时,如果在复制运行期间发生数据库崩溃或一些表锁定操作,这些“锁定”数据将留在表distributed_locks中,无法自动删除。同时,日志将继续输出ERROR消息,如下所示:[jfrt] [ERROR] [982710cc9799d78f] [s.d.l.s。]DbLocksServiceImpl:180] -获取锁失败:LockInfo{category='node-event-task-manager', key='maven-remote-cache/aopalliance/aopalliance/1.0/aopalliance-1.0.jar', owner='jf-001', threadId=3587, starttedtime =1667524212841, threadName='metadata-operator-events-event- sweper -1'}
...
[jfrt] [ERROR] [982710cc9799d78f] [s.d.l.s。]DbLocksServiceImpl:180] [vents -event-sweeper-1] -获取锁失败:LockInfo{category='node-event-task-manager', key='79fb80e7228486521156eae510de998264e6620c',
...
如何处理?
我们需要删除数据库中错误的数据。
首先,我们使用日志中的“key”来查询数据库,例如“maven-remote-cache/aopalliance/aopalliance/1.0/aopalliance-1.0.jar”,“79fb80e7228486521156eae510de99826620c”:Select * from distributed_locks where lock_key in ('maven-remote-cache/aopalliance/aopalliance/1.0/aopalliance-1.0.jar', '79fb80e7228486521156eae510de998264e6620c');
响应,例如:
然后删除它们:Delete from distributed_locks where lock_key in ('maven-remote-cache/aopalliance/aopalliance/1.0/aopalliance-1.0.jar', '79fb80e7228486521156eae510de998264e6620c');
之后,日志ERROR消息将消失。