crawlercommons.urlfrontier.service.ignite.IgniteHeartbeat Maven / Gradle / Ivy
/**
* SPDX-FileCopyrightText: 2022 Crawler-commons SPDX-License-Identifier: Apache-2.0 Licensed to
* Crawler-Commons under one or more contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright ownership. DigitalPebble licenses
* this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing permissions and
* limitations under the License.
*/
package crawlercommons.urlfrontier.service.ignite;
import crawlercommons.urlfrontier.service.cluster.Hearbeat;
import java.time.Instant;
import java.util.HashSet;
import java.util.Set;
import javax.cache.Cache.Entry;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
/** The frontiers cache must have been created beforehand * */
public class IgniteHeartbeat extends Hearbeat {
private final Ignite ignite;
IgniteHeartbeat(int delay, Ignite ignite) {
super(delay);
this.ignite = ignite;
}
@Override
protected void sendHeartBeat() {
IgniteCache frontiers = ignite.cache(IgniteService.frontiersCacheName);
frontiers.put(listener.getHostAndPort(), Instant.now().toString());
Set activeFrontiers = new HashSet<>();
// get all the active frontiers and notify the listener about them
try (QueryCursor> cur =
frontiers.query(new ScanQuery())) {
for (Entry entry : cur) {
activeFrontiers.add(entry.getKey());
}
}
listener.setNodes(activeFrontiers);
}
}