Cruisecontrol зависает при проверке SVN на модификации

import java.util.regex.*;
import java.util.LinkedList;

public class Splitter {
    private static final Pattern DEFAULT_PATTERN = Pattern.compile("\\s+");

    private Pattern pattern;
    private boolean keep_delimiters;

    public Splitter(Pattern pattern, boolean keep_delimiters) {
        this.pattern = pattern;
        this.keep_delimiters = keep_delimiters;
    }
    public Splitter(String pattern, boolean keep_delimiters) {
        this(Pattern.compile(pattern==null?"":pattern), keep_delimiters);
    }
    public Splitter(Pattern pattern) { this(pattern, true); }
    public Splitter(String pattern) { this(pattern, true); }
    public Splitter(boolean keep_delimiters) { this(DEFAULT_PATTERN, keep_delimiters); }
    public Splitter() { this(DEFAULT_PATTERN); }

    public String[] split(String text) {
        if (text == null) {
            text = "";
        }

        int last_match = 0;
        LinkedList splitted = new LinkedList();

        Matcher m = this.pattern.matcher(text);

        while (m.find()) {

            splitted.add(text.substring(last_match,m.start()));

            if (this.keep_delimiters) {
                splitted.add(m.group());
            }

            last_match = m.end();
        }

        splitted.add(text.substring(last_match));

        return splitted.toArray(new String[splitted.size()]);
    }

    public static void main(String[] argv) {
        if (argv.length != 2) {
            System.err.println("Syntax: java Splitter  ");
            return;
        }

        Pattern pattern = null;
        try {
            pattern = Pattern.compile(argv[0]);
        }
        catch (PatternSyntaxException e) {
            System.err.println(e);
            return;
        }

        Splitter splitter = new Splitter(pattern);

        String text = argv[1];
        int counter = 1;
        for (String part : splitter.split(text)) {
            System.out.printf("Part %d: \"%s\"\n", counter++, part);
        }
    }
}

/*
    Example:
    > java Splitter "\W+" "Hello World!"
    Part 1: "Hello"
    Part 2: " "
    Part 3: "World"
    Part 4: "!"
    Part 5: ""
*/

мне действительно не нравится другой путь, где Вы получаете пустой элемент впереди и назад. Разделитель обычно не вначале или в конце строки, таким образом Вы чаще всего заканчиваете тем, что тратили впустую две хороших ячейки массива.

Редактирование: Фиксированные предельные случаи. Прокомментированный источник с тестовыми сценариями может быть найден здесь: http://snippets.dzone.com/posts/show/6453

5
задан Michael Borgwardt 27 October 2009 в 16:50
поделиться

3 ответа

Have you tried issuing the same SVN commands manually from the command line? Does it hang then?

1
ответ дан 15 December 2019 в 01:05
поделиться

Несколько указателей:

  1. Зависает ли он в определенное время дня? Или это действительно случайно? Есть ли новые резервные копии, которые отключают службу для резервного копирования?

  2. Сравнивали ли вы config.xml нового круизного сервера со старым (предполагая, что круизная версия идентична на обоих, имеют ли они точно такие же задачи или есть что-то, что может замедлять выполнение задачи набора модификаций) ?

  3. Расположены ли старые и новые машины в тех же сетях, что и ваши репозитории Subversion (или, по крайней мере, у них одинаковое время отклика при доступе ко всем репозиториям проекта?) Учитывая, что сам круиз-сервер остается отзывчивым, возможно ли, что репо конкретного проекта, к которому он обращается во время зависания, слишком велико, слишком медленно или слишком много всего происходит в репозитории?

Это всего лишь указатели по устранению неполадок, поэтому они ни в коем случае не являются реальными ответами на ваш вопрос. Возможно, так я бы подошел к проблеме (помимо выполнения команд вручную, как в ответе Гжегожа Оледского).

1
ответ дан 15 December 2019 в 01:05
поделиться

Еще одна идея. Вы всегда можете запустить CruiseControl JVM в режиме отладки. И всякий раз, когда он зависает, подключайтесь к нему с помощью какой-нибудь IDE, например Eclipse. А затем вы можете все потоки приложения CC, приостановить некоторые из них и посмотреть, чем они заняты.

2
ответ дан 15 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: