Commit 0cf2172d authored by Alain Takoudjou's avatar Alain Takoudjou Committed by Alain Takoudjou

[erp5_web_monitoring] Fix concurence problem on destroy OPML while sync is...

[erp5_web_monitoring] Fix concurence problem on destroy OPML while sync is running or start just after

If Sync start in background and destroy OPML is launched, some data can be removed while sync is writing. So we prevent sync to run if destroy OPML is running and also, we refuse to destroy OPML if sync is running.
parent cf65af16
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>ERP5 Page Monitoring Settings Configurator</title> <title>ERP5 Page Monitoring Settings Configurator</title>
<link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/>
<!-- renderjs --> <!-- renderjs -->
<script src="rsvp.js" type="text/javascript"></script> <script src="rsvp.js" type="text/javascript"></script>
<script src="renderjs.js" type="text/javascript"></script> <script src="renderjs.js" type="text/javascript"></script>
......
...@@ -242,7 +242,7 @@ ...@@ -242,7 +242,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>963.8904.14589.19234</string> </value> <value> <string>963.27666.8050.30907</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -260,7 +260,7 @@ ...@@ -260,7 +260,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1509441500.96</float> <float>1515055044.86</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -60,6 +60,8 @@ ...@@ -60,6 +60,8 @@
.onEvent('click', function (event) { .onEvent('click', function (event) {
var gadget = this, var gadget = this,
sync_start_time,
success = true,
element = gadget.element.querySelector("#destroyOPML"); element = gadget.element.querySelector("#destroyOPML");
function removeAllOPML(result) { function removeAllOPML(result) {
...@@ -96,23 +98,57 @@ ...@@ -96,23 +98,57 @@
return gadget.notifySubmitting() return gadget.notifySubmitting()
.push(function () { .push(function () {
return gadget.getSetting('sync_start_time');
})
.push(function (start_time) {
sync_start_time = start_time;
return gadget.getSetting('latest_sync_time');
})
.push(function (finish_time) {
if (finish_time - sync_start_time < 0) {
// sync is running, cannot remove OPML now
success = false;
return RSVP.all([
gadget.notifySubmitted({
message: 'Cannot destroy now, please wait until background ' +
'sync is finished',
status: 'error'
})
]);
}
element.setAttribute("disabled", "disabled"); element.setAttribute("disabled", "disabled");
return gadget.jio_allDocs({ return gadget.jio_allDocs({
query: 'portal_type: "opml"', query: 'portal_type: "opml"',
select_list: ['title'] select_list: ['title']
});
}) })
.push(function (result) { .push(function (result) {
return removeAllOPML(result); return RSVP.all([
gadget.setSetting('sync_lock', true),
removeAllOPML(result)
]);
}) })
.push(function () { .push(function () {
return RSVP.all([ return RSVP.all([
gadget.notifySubmitted({message: 'All OPML removed', status: 'success'}) gadget.setSetting('sync_lock', false),
gadget.notifySubmitted({
message: 'All OPML removed',
status: 'success'
})
]); ]);
}, function () {
success = false;
return gadget.setSetting('sync_lock', false);
});
}) })
.push(function () { .push(function () {
element.textContent = element.textContent.slice(10, element.textContent.length); element.textContent = element.textContent.slice(
10,
element.textContent.length
);
element.setAttribute('rel', '');
if (success) {
return gadget.redirect({"command": "reload"}); return gadget.redirect({"command": "reload"});
}
}); });
} }
}, false, false) }, false, false)
......
...@@ -238,7 +238,7 @@ ...@@ -238,7 +238,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>963.21245.1149.59784</string> </value> <value> <string>964.38401.39195.47086</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -256,7 +256,7 @@ ...@@ -256,7 +256,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1510216637.34</float> <float>1515059069.3</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -150,15 +150,28 @@ ...@@ -150,15 +150,28 @@
// There was another recent sync don't start a new sync before the time_interval! // There was another recent sync don't start a new sync before the time_interval!
return; return;
} }
return gadget.getSetting('sync_lock')
.push(function (sync_lock) {
if (!sync_lock) {
gadget.props.sync_locked = false;
return syncAllStorageWithCheck(); return syncAllStorageWithCheck();
}
gadget.props.sync_locked = true;
return gadget.notifySubmitted({
message: "Auto sync is currently locked by another task " +
"and will be restarted later...",
status: "error"
});
});
}) })
.push(function () { .push(function () {
return gadget.getSetting('sync_data_interval'); return gadget.getSetting('sync_data_interval');
}) })
.push(function (timer_interval) { .push(function (timer_interval) {
if (gadget.props.offline === true) { if (gadget.props.offline === true ||
// Offline mode detected, next check will be in 3 minutes gadget.props.sync_locked === true) {
timer_interval = 180000; // Offline mode detected or sync locked. Next run in 1 minute
timer_interval = 60000;
} else if (timer_interval === undefined) { } else if (timer_interval === undefined) {
timer_interval = gadget.props.default_sync_interval; timer_interval = gadget.props.default_sync_interval;
} }
......
...@@ -242,7 +242,7 @@ ...@@ -242,7 +242,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>963.29142.15969.45158</string> </value> <value> <string>964.38426.36779.39065</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -260,7 +260,7 @@ ...@@ -260,7 +260,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1510669949.87</float> <float>1515058880.82</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment