Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IGNITE-20472 Dump API implemented #10953

Merged
merged 145 commits into from
Oct 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
145 commits
Select commit Hold shift + click to select a range
18f8278
IGNITE-19950 WIP
nizhikov Jul 12, 2023
80e8b84
IGNITE-19950 WIP
nizhikov Jul 12, 2023
e2b9264
IGNITE-19950 WIP
nizhikov Jul 18, 2023
e698ed6
IGNITE-19950 WIP
nizhikov Jul 27, 2023
9ba0280
IGNITE-19950 WIP
nizhikov Jul 27, 2023
7300b47
IGNITE-19950 Save metadata implemented
nizhikov Jul 27, 2023
dcb9e81
IGNITE-19950 Dump creation process implemented
nizhikov Jul 28, 2023
be062a7
IGNITE-19950 Dump creation process implemented
nizhikov Jul 28, 2023
b275a98
IGNITE-19950 Stub for dump creation process implemented
nizhikov Jul 28, 2023
42c1489
Merge branch 'master' into IGNITE-19950-snapshot-merge
nizhikov Aug 11, 2023
370edae
Merge branch 'master' into IGNITE-19950-snapshot-merge
nizhikov Aug 16, 2023
a55bc15
IGNITE-19950 WIP
nizhikov Aug 21, 2023
8f0b873
Merge branch 'master' into IGNITE-19950-snapshot-merge
nizhikov Aug 21, 2023
4e0bd99
IGNITE-19950 Creation seems to be complete
nizhikov Aug 23, 2023
00f53af
Merge branch 'master' into IGNITE-19950
nizhikov Aug 23, 2023
7aeca21
IGNITE-19950 Tests improvements
nizhikov Aug 24, 2023
b87338d
IGNITE-19950 Tests improvements
nizhikov Aug 28, 2023
2b81128
IGNITE-19950 Tests improvements
nizhikov Aug 28, 2023
a64d1cf
IGNITE-19950 Tests improvements
nizhikov Aug 28, 2023
a343bd1
IGNITE-19950 Tests improvements
nizhikov Aug 28, 2023
0bb66b5
Merge branch 'master' into IGNITE-19950
nizhikov Aug 28, 2023
725837c
IGNITE-19950 Tests improvements
nizhikov Aug 29, 2023
0418b46
IGNITE-19950 Tests improvements
nizhikov Aug 30, 2023
289bc27
IGNITE-19950 Restore WIP
nizhikov Aug 30, 2023
10059d8
IGNITE-19950 Test improvements
nizhikov Aug 30, 2023
1a37683
IGNITE-19950 Revert unnecessary changes.
nizhikov Aug 30, 2023
f6049cc
IGNITE-19950 Per partition parallelism
nizhikov Aug 30, 2023
fa8d34c
IGNITE-19950 Per partition parallelism
nizhikov Aug 30, 2023
42dbe75
IGNITE-19950 Tests improvements.
nizhikov Aug 30, 2023
d48c179
Merge branch 'master' into IGNITE-19950
nizhikov Aug 31, 2023
f754d9b
IGNITE-19950 Code improvements
nizhikov Aug 31, 2023
22f709d
IGNITE-19950 Remove restore code.
nizhikov Aug 31, 2023
1386384
IGNITE-19950 CRC check added.
nizhikov Aug 31, 2023
4b4b513
IGNITE-19950 Code review fixes.
nizhikov Aug 31, 2023
e23358a
IGNITE-19950 Code review fixes.
nizhikov Aug 31, 2023
53afadf
IGNITE-19950 Code review fixes.
nizhikov Aug 31, 2023
b36ebe5
IGNITE-19950 Code review fixes.
nizhikov Aug 31, 2023
d32df43
IGNITE-19950 Test improvements
nizhikov Aug 31, 2023
ca593e3
IGNITE-19950 Test improvements
nizhikov Aug 31, 2023
2d56981
IGNITE-19950 Test improvements
nizhikov Aug 31, 2023
65aef64
ISE-2839 Check WIP
nizhikov Sep 1, 2023
1520fc5
IGNITE-19950 Code review fixes
nizhikov Sep 1, 2023
70a0a22
IGNITE-19950 Tests improvements
nizhikov Sep 1, 2023
884bfc8
IGNITE-19950 Tests improvements
nizhikov Sep 1, 2023
a0dceec
IGNITE-19950 Tests improvements
nizhikov Sep 1, 2023
56666f1
IGNITE-19950 Tests improvements
nizhikov Sep 1, 2023
4aca1e4
Merge branch 'IGNITE-19950' into ISE-2839
nizhikov Sep 1, 2023
9a26086
ISE-2839 Check command implemented
nizhikov Sep 3, 2023
9a57c29
ISE-2839 Check command implemented
nizhikov Sep 3, 2023
37d1b35
ISE-2839 Check command implemented (concurrent test is flaky).
nizhikov Sep 4, 2023
18d5a91
ISE-2839 Check command implemented (concurrent test is flaky).
nizhikov Sep 4, 2023
43b9415
ISE-2839 Check command implemented
nizhikov Sep 4, 2023
e65f5dc
ISE-2839 Improvement of create dump process
nizhikov Sep 4, 2023
97a7bc5
ISE-2839 Improvement of create dump process
nizhikov Sep 5, 2023
8b4db20
ISE-2839 Code review fixes
nizhikov Sep 5, 2023
8ad229d
Merge branch 'master' into IGNITE-19950
nizhikov Sep 5, 2023
d733a81
Merge branch 'IGNITE-19950' into ISE-2839
nizhikov Sep 5, 2023
f830bf5
IGNITE-19950 Code review fixes
nizhikov Sep 5, 2023
99f9b33
IGNITE-19950 Code review fixes
nizhikov Sep 5, 2023
68b998f
IGNITE-19950 Code review fixes
nizhikov Sep 5, 2023
c2bb0ae
IGNITE-19950 Code review fixes
nizhikov Sep 5, 2023
ed067e6
IGNITE-19950 Bug fix
nizhikov Sep 5, 2023
ac895e8
IGNITE-19950 Bug fix
nizhikov Sep 5, 2023
b32e681
IGNITE-19950 Use max seen version to distinguish
nizhikov Sep 7, 2023
dfb70fe
Merge branch 'IGNITE-19950' into ISE-2839
nizhikov Sep 7, 2023
5d04b16
Revert "IGNITE-19950 Use max seen version to distinguish"
nizhikov Sep 7, 2023
0a71a61
ISE-2578 WIP
nizhikov Sep 11, 2023
d24e3f2
Merge branch 'master' into IGNITE-19950
nizhikov Sep 11, 2023
e8f11d3
IGNITE-19950 Code review fixes
nizhikov Sep 11, 2023
e68751f
IGNITE-19950 Code review fixes
nizhikov Sep 11, 2023
eeb0715
Merge branch 'IGNITE-19950' into ISE-2578
nizhikov Sep 11, 2023
81e0368
Merge branch 'IGNITE-19950' into ISE-2839
nizhikov Sep 11, 2023
573ed5e
ISE-2839 Code review fixes
nizhikov Sep 11, 2023
6eaf5da
ISE-2839 Code review fixes
nizhikov Sep 11, 2023
2019898
IGNITE-19950 Tests added
nizhikov Sep 11, 2023
1ff78e7
IGNITE-19950 Tests added
nizhikov Sep 11, 2023
65a9f42
Merge branch 'IGNITE-19950' into ISE-2839
nizhikov Sep 12, 2023
436c02f
Merge branch 'ISE-2839' into ISE-2578
nizhikov Sep 12, 2023
c9511a5
ISE-2578 WIP
nizhikov Sep 12, 2023
522d28f
IGNITE-19950 Code review fixes
nizhikov Sep 12, 2023
0d1cf9a
IGNITE-19950 Code review fixes
nizhikov Sep 12, 2023
44c93cd
Merge branch 'IGNITE-19950' into ISE-2839
nizhikov Sep 12, 2023
212da18
Merge branch 'ISE-2839' into ISE-2578
nizhikov Sep 12, 2023
53aa06a
IGNITE-19950 Code review fixes
nizhikov Sep 12, 2023
d16122f
IGNITE-19950 Code review fixes
nizhikov Sep 12, 2023
af3a457
Merge branch 'IGNITE-19950' into ISE-2839
nizhikov Sep 12, 2023
22be853
Merge branch 'ISE-2839' into ISE-2578
nizhikov Sep 12, 2023
63e579f
IGNITE-19950 Code review fixes
nizhikov Sep 15, 2023
bfce6ce
Merge branch 'master' into IGNITE-19950
nizhikov Sep 15, 2023
b04326b
Merge branch 'IGNITE-19950' into ISE-2839
nizhikov Sep 15, 2023
cb2b301
Merge branch 'ISE-2839' into ISE-2578
nizhikov Sep 15, 2023
3175a57
ISE-2578 WIP
nizhikov Sep 18, 2023
929b6b4
IGNITE-19950 Code review changes.
nizhikov Sep 18, 2023
d9025e1
IGNITE-19950 Code review changes.
nizhikov Sep 18, 2023
49a07b4
IGNITE-19950 Code review changes.
nizhikov Sep 18, 2023
6347932
IGNITE-19950 Tests fixes.
nizhikov Sep 18, 2023
c22205c
IGNITE-19950 Tests fixes.
nizhikov Sep 18, 2023
30b40a5
IGNITE-19950 Tests fixes.
nizhikov Sep 18, 2023
1285fff
IGNITE-19950 Tests fixes.
nizhikov Sep 19, 2023
b50b072
IGNITE-19950 Tests fixes.
nizhikov Sep 19, 2023
f749811
IGNITE-19950 Tests fixes.
nizhikov Sep 19, 2023
f4f1210
Merge branch 'IGNITE-19950' into ISE-2839
nizhikov Sep 20, 2023
bd55bc9
IGNITE-19950 Tests fixes.
nizhikov Sep 20, 2023
73f16c9
IGNITE-19950 Tests fixes.
nizhikov Sep 20, 2023
600ea13
IGNITE-19950 NPE fix
nizhikov Sep 20, 2023
a888ac7
Merge branch 'cache_dumps' into IGNITE-20429
nizhikov Sep 22, 2023
21fa270
IGNITE-20429 Dump check command implemented
nizhikov Sep 22, 2023
490a32a
IGNITE-20429 Fix concurrent bug
nizhikov Sep 22, 2023
70d8bd8
Merge branch 'IGNITE-20429' into ISE-2578
nizhikov Sep 22, 2023
cf21059
IGNITE-20472 Dump API implemented
nizhikov Sep 22, 2023
00dd52b
IGNITE-20429 Dump check command
nizhikov Sep 22, 2023
2c8af81
Merge branch 'IGNITE-20429' into IGNITE-20472
nizhikov Sep 22, 2023
e657040
IGNITE-20472 Dump reader API
nizhikov Sep 22, 2023
adc7946
IGNITE-20472 Dump reader API
nizhikov Sep 22, 2023
091bf77
Merge branch 'IGNITE-20429' into IGNITE-20472
nizhikov Sep 22, 2023
6170860
IGNITE-20472 Use per thread buffer for serializers.
nizhikov Sep 22, 2023
9222f43
IGNITE-20472 Use per thread buffer for serializers.
nizhikov Sep 22, 2023
1eb1dbd
IGNITE-20429 Use per thread buffer for serializers.
nizhikov Sep 22, 2023
7bb5f8c
Merge branch 'IGNITE-20429' into IGNITE-20472
nizhikov Sep 22, 2023
ce17a8d
IGNITE-20429 Use per thread buffer for serializers.
nizhikov Sep 25, 2023
b4de161
Merge branch 'cache_dumps' into IGNITE-20429
nizhikov Sep 25, 2023
9badcdb
IGNITE-20429 Code review fixes.
nizhikov Sep 25, 2023
0eac15a
IGNITE-20429 Code review fixes.
nizhikov Sep 25, 2023
0734630
IGNITE-20429 Code review fixes.
nizhikov Sep 25, 2023
25140bf
Merge branch 'IGNITE-20429' into IGNITE-20472
nizhikov Sep 25, 2023
5d3847b
IGNITE-20429 Code review fixes.
nizhikov Sep 26, 2023
73e8b68
Merge branch 'cache_dumps' into IGNITE-20472
nizhikov Sep 27, 2023
4ed654f
Merge branch 'cache_dumps' into IGNITE-20472
nizhikov Sep 27, 2023
47ebfbd
IGNITE-20472 Test improvements
nizhikov Sep 27, 2023
570df2f
IGNITE-20472 Introduce keep binary parameter
nizhikov Sep 27, 2023
0d472c3
IGNITE-20472 Introduce keep binary parameter
nizhikov Sep 27, 2023
e997dad
IGNITE-20472 WIP
nizhikov Sep 29, 2023
54b0fff
IGNITE-20472 WIP
nizhikov Sep 29, 2023
d86ec70
Merge branch 'master' into IGNITE-20472
nizhikov Sep 29, 2023
d9381fc
Merge branch 'cache_dumps' into IGNITE-20472
nizhikov Sep 29, 2023
e4cde84
IGNITE-20472 WIP
nizhikov Oct 2, 2023
cbb409f
IGNITE-20472 WIP
nizhikov Oct 2, 2023
2fa2244
IGNITE-20472 revert unnecessary changes
nizhikov Oct 2, 2023
98ba20f
Merge branch 'cache_dumps' into IGNITE-20472
nizhikov Oct 2, 2023
fae6f18
IGNITE-20472 Test fix
nizhikov Oct 3, 2023
a3ae5c9
IGNITE-20472 Support print consumer
nizhikov Oct 3, 2023
71b5776
Merge branch 'cache_dumps' into IGNITE-20472
nizhikov Oct 4, 2023
da0de9c
IGNITE-20472 Fix dump when data streamer used to load data.
nizhikov Oct 4, 2023
00e90c8
IGNITE-20472 Code review fixes.
nizhikov Oct 5, 2023
e5daf07
IGNITE-20472 --only-primary mode support added
nizhikov Oct 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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 org.apache.ignite.dump;

import java.util.Iterator;
import org.apache.ignite.binary.BinaryType;
import org.apache.ignite.cdc.TypeMapping;
import org.apache.ignite.internal.processors.cache.StoredCacheData;
import org.apache.ignite.internal.processors.cache.persistence.snapshot.dump.Dump;
import org.apache.ignite.lang.IgniteExperimental;

/**
* Consumer of {@link Dump}.
* This consumer will receive all {@link DumpEntry} stored in cache dump during {@code IgniteDumpReader} application invocation.
* The lifecycle of the consumer is the following:
* <ul>
* <li>Start of the consumer {@link #start()}.</li>
* <li>Stop of the consumer {@link #stop()}.</li>
* </ul>
*
*/
@IgniteExperimental
public interface DumpConsumer {
/**
* Starts the consumer.
*/
void start();

/**
* Handles type mappings.
* @param mappings Mappings iterator.
*/
void onMappings(Iterator<TypeMapping> mappings);

/**
* Handles binary types.
* @param types Binary types iterator.
*/
void onTypes(Iterator<BinaryType> types);

/**
* Handles cache configs.
* Note, there can be several copies of cache config in the dump.
* This can happen if dump contains data from several nodes.
* @param caches Stored cache data.
*/
void onCacheConfigs(Iterator<StoredCacheData> caches);

/**
* Handles cache data.
* This method can be invoced by several threads concurrently.
* Note, there can be several copies of group partition in the dump.
* This can happen if dump contains data from several nodes.
* In this case callback will be invoked several time for the same pair of [grp, part] values.
*
* @param grp Group id.
* @param part Partition.
* @param data Cache data iterator.
* @see DumpReaderConfiguration#threadCount()
*/
void onPartition(int grp, int part, Iterator<DumpEntry> data);

/**
* Stops the consumer.
* This method can be invoked only after {@link #start()}.
*/
void stop();
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,20 @@
* limitations under the License.
*/

package org.apache.ignite.internal.processors.cache.persistence.snapshot.dump;
package org.apache.ignite.dump;

import org.apache.ignite.internal.processors.cache.CacheObject;
import org.apache.ignite.internal.processors.cache.KeyCacheObject;
import java.util.Iterator;
import org.apache.ignite.internal.processors.cache.persistence.snapshot.dump.Dump;
import org.apache.ignite.lang.IgniteExperimental;

/**
* Single cache entry from dump.
*
* @see Dump#iterator(String, int, int)
* @see DumpConsumer#onPartition(int, int, Iterator)
* @see org.apache.ignite.IgniteSnapshot#createDump(String)
*/
@IgniteExperimental
public interface DumpEntry {
/** @return Cache id. */
public int cacheId();
Expand All @@ -31,8 +37,8 @@ public interface DumpEntry {
public long expireTime();

/** @return Key. */
public KeyCacheObject key();
public Object key();

/** @return Value. */
public CacheObject value();
public Object value();
}
210 changes: 210 additions & 0 deletions modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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 org.apache.ignite.dump;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.GridLoggerProxy;
import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.cdc.CdcMain;
import org.apache.ignite.internal.processors.cache.persistence.snapshot.SnapshotMetadata;
import org.apache.ignite.internal.processors.cache.persistence.snapshot.dump.Dump;
import org.apache.ignite.internal.processors.cache.persistence.snapshot.dump.Dump.DumpedPartitionIterator;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.U;

import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.apache.ignite.configuration.DataStorageConfiguration.DFLT_MARSHALLER_PATH;
import static org.apache.ignite.internal.IgniteKernal.NL;
import static org.apache.ignite.internal.IgniteKernal.SITE;
import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;

/**
* Dump Reader application.
* The application runs independently of Ignite node process and provides the ability to the {@link DumpConsumer} to consume
* all data stored in cache dump ({@link Dump})
*/
public class DumpReader implements Runnable {
/** Configuration. */
private final DumpReaderConfiguration cfg;

/** Log. */
private final IgniteLogger log;

/**
* @param cfg Dump reader configuration.
* @param log Logger.
*/
public DumpReader(DumpReaderConfiguration cfg, IgniteLogger log) {
this.cfg = cfg;
this.log = log.getLogger(DumpReader.class);
}

/** {@inheritDoc} */
@Override public void run() {
ackAsciiLogo();

try (Dump dump = new Dump(cfg.dumpRoot(), cfg.keepBinary(), false, log)) {
DumpConsumer cnsmr = cfg.consumer();

cnsmr.start();

try {
File[] files = new File(cfg.dumpRoot(), DFLT_MARSHALLER_PATH).listFiles(BinaryUtils::notTmpFile);

if (files != null)
cnsmr.onMappings(CdcMain.typeMappingIterator(files, tm -> true));

cnsmr.onTypes(dump.types());

Map<Integer, List<String>> grpToNodes = new HashMap<>();

for (SnapshotMetadata meta : dump.metadata()) {
for (Integer grp : meta.cacheGroupIds())
grpToNodes.computeIfAbsent(grp, key -> new ArrayList<>()).add(meta.folderName());
}

cnsmr.onCacheConfigs(grpToNodes.entrySet().stream()
.flatMap(e -> dump.configs(F.first(e.getValue()), e.getKey()).stream())
.iterator());

ExecutorService execSvc = cfg.threadCount() > 1 ? Executors.newFixedThreadPool(cfg.threadCount()) : null;

AtomicBoolean skip = new AtomicBoolean(false);

for (Map.Entry<Integer, List<String>> e : grpToNodes.entrySet()) {
int grp = e.getKey();

for (String node : e.getValue()) {
for (int part : dump.partitions(node, grp)) {
Runnable consumePart = () -> {
if (skip.get()) {
if (log.isDebugEnabled()) {
log.debug("Skip partition due to previous error [node=" + node + ", grp=" + grp +
", part=" + part + ']');
}

return;
}

try (DumpedPartitionIterator iter = dump.iterator(node, grp, part)) {
if (log.isDebugEnabled()) {
log.debug("Consuming partition [node=" + node + ", grp=" + grp +
", part=" + part + ']');
}

cnsmr.onPartition(grp, part, iter);
}
catch (Exception ex) {
skip.set(cfg.failFast());

log.error("Error consuming partition [node=" + node + ", grp=" + grp +
", part=" + part + ']', ex);

throw new IgniteException(ex);
}
};

if (cfg.threadCount() > 1)
execSvc.submit(consumePart);
else
consumePart.run();
}
}
}

if (cfg.threadCount() > 1) {
execSvc.shutdown();

boolean res = execSvc.awaitTermination(cfg.timeout().toMillis(), MILLISECONDS);

if (!res) {
log.warning("Dump processing tasks not finished after timeout. Cancelling");

execSvc.shutdownNow();
}
}
}
finally {
cnsmr.stop();
}
}
catch (Exception e) {
throw new IgniteException(e);
}
}

/** */
private void ackAsciiLogo() {
String ver = "ver. " + ACK_VER_STR;

if (log.isInfoEnabled()) {
log.info(NL + NL +
">>> __________ ________________ ___ __ ____ ______ ___ _______ ___ _______" + NL +
">>> / _/ ___/ |/ / _/_ __/ __/ / _ \\/ / / / |/ / _ \\ / _ \\/ __/ _ | / _ \\/ __/ _ \\" + NL +
">>> _/ // (_ / // / / / / _/ / // / /_/ / /|_/ / ___/ / , _/ _// __ |/ // / _// , _/" + NL +
">>> /___/\\___/_/|_/___/ /_/ /___/ /____/\\____/_/ /_/_/ /_/|_/___/_/ |_/____/___/_/|_|" + NL +
">>> " + NL +
">>> " + ver + NL +
">>> " + COPYRIGHT + NL +
">>> " + NL +
">>> Ignite documentation: " + "http://" + SITE + NL +
">>> ConsistentId: " + cfg.dumpRoot() + NL +
">>> Consumer: " + U.toStringSafe(cfg.consumer())
);
}

if (log.isQuiet()) {
U.quiet(false,
" __________ ________________ ___ __ ____ ______ ___ _______ ___ _______",
" / _/ ___/ |/ / _/_ __/ __/ / _ \\/ / / / |/ / _ \\ / _ \\/ __/ _ | / _ \\/ __/ _ \\",
" _/ // (_ / // / / / / _/ / // / /_/ / /|_/ / ___/ / , _/ _// __ |/ // / _// , _/",
"/___/\\___/_/|_/___/ /_/ /___/ /____/\\____/_/ /_/_/ /_/|_/___/_/ |_/____/___/_/|_|",
"",
ver,
COPYRIGHT,
"",
"Ignite documentation: " + "http://" + SITE,
"Dump: " + cfg.dumpRoot(),
"Consumer: " + U.toStringSafe(cfg.consumer()),
"",
"Quiet mode.");

String fileName = log.fileName();

if (fileName != null)
U.quiet(false, " ^-- Logging to file '" + fileName + '\'');

if (log instanceof GridLoggerProxy)
U.quiet(false, " ^-- Logging by '" + ((GridLoggerProxy)log).getLoggerInfo() + '\'');

U.quiet(false,
" ^-- To see **FULL** console log here add -DIGNITE_QUIET=false or \"-v\" to ignite-cdc.{sh|bat}",
"");
}
}
}
Loading