【问题标题】:gerrit to github replication: jsch issuesgerrit 到 github 复制:jsch 问题
【发布时间】:2011-09-19 14:18:09
【问题描述】:

尝试设置从 gerrit 到我的 github 存储库的复制。获取此堆栈跟踪:

[2011-09-20 00:11:58,470] 错误 com.google.gerrit.server.git.PushReplication:无法复制到 git@github.com:myuser/myrepo.git
org.eclipse.jgit.errors.TransportException: git@github.com:myuser/myrepo.git: Session.connect: java.net.SocketTimeoutException: 读取超时
在 org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:138)
在 org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:121)
在 org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.(TransportGitSsh.java:248)
在 org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:147)
在 com.google.gerrit.server.git.PushOp.listRemote(PushOp.java:358)
在 com.google.gerrit.server.git.PushOp.generateUpdates(PushOp.java:312)
在 com.google.gerrit.server.git.PushOp.pushVia(PushOp.java:258)
在 com.google.gerrit.server.git.PushOp.runImpl(PushOp.java:213)
在 com.google.gerrit.server.git.PushOp.run(PushOp.java:166)
在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
在 java.util.concurrent.FutureTask.run(FutureTask.java:138)
在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
在 com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:324)
在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
在 java.lang.Thread.run(Thread.java:662)

原因:com.jcraft.jsch.JSchException:Session.connect:java.net.SocketTimeoutException:读取超时
在 com.jcraft.jsch.Session.connect(Session.java:504)
在 org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:128)

我的配置文件如下:

replication.config:

[remote "github"]
url = git@github.com:myuser/${name}.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
timeout = 5
replicationDelay = 0
authGroup = Administrators

安全配置:

[database]
    password = secret
[ssh]
    file = /home/gerrit2/.ssh/config

.ssh/config:

Host github.com:
  IdentityFile ~/.ssh/id_rsa
  PreferredAuthentications publickey

我试着跑了

ssh -i etc/ssh_host_dsa_key git@github.com
ssh -i etc/ssh_host_rsa_key git@github.com
ssh -i ~/.ssh/id_rsa git@github.com
ssh -i ~/.ssh/id_dsa  git@github.com

并且能够“点击”github,因此密钥导入正常,不确定问题是什么, 任何建议表示赞赏。

【问题讨论】:

  • A SocketTimeoutException 表示套接字读取或接受发生超时。您是否尝试增加超时值?
  • 谢谢,我之前应该试过的!在 replication.config 中将超时设置为 60(而不是 5)后,效果很好。
  • 我没想到解决方案会这么简单,我只是想排除一个可能的原因。我将此评论(带有一些附加信息)作为答案。如果它解决了您的问题,请随意接受(使用绿色复选标记按钮)。

标签: ssh github jsch gerrit


【解决方案1】:

正如异常名称SocketTimeoutException 所说(及其documentation details):

表示套接字读取或接受发生超时的信号。

documentation of Gerrit's replication.config

远程。.timeout

在放弃和声明远程端之前等待网络读取或写入完成的秒数 没有响应。如果为0,则没有超时,推送客户端无限期等待。

超时时间应该足够大,以便将对象大部分转移到另一端。 1 秒可能太小 对于较大的项目,尤其是通过 WAN 链接的项目,而 10-30 秒是更合理的超时值。

默认为 0 秒,无限期等待。

你的值是 5 秒,你可以试试更大的值。

(问题仅与 JSch 间接相关 - JSch 的 Session.connect(int) 将简单地获取超时参数并将其传递给它创建的 Socket。我应该记录此超时用于 JSch 的 reminds me 单位 - 秒或毫秒。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多