From: Sergey Matveev Date: Fri, 9 Jul 2021 12:43:00 +0000 (+0300) Subject: Merge branch 'develop' X-Git-Tag: v7.2.1^0 X-Git-Url: http://www.git.cypherpunks.ru/?a=commitdiff_plain;h=80a2c0146ad7b72c3b9ee8f59667e66ddb5e72df;hp=3ccbb7d242629d0873ba75313461f7d447d5e0e8;p=nncp.git Merge branch 'develop' --- diff --git a/doc/download.texi b/doc/download.texi index 28fbda8..c2b364f 100644 --- a/doc/download.texi +++ b/doc/download.texi @@ -28,6 +28,10 @@ Tarballs include all necessary required libraries: @multitable {XXXXX} {XXXX-XX-XX} {XXXX KiB} {link sign} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} @headitem Version @tab Date @tab Size @tab Tarball @tab SHA256 checksum +@item @ref{Release 7_2_0, 7.2.0} @tab 2021-07-08 @tab 1136 KiB +@tab @url{download/nncp-7.2.0.tar.xz, link} @url{download/nncp-7.2.0.tar.xz.sig, sign} +@tab @code{70DBB97B 86C9B4B6 E35CFF02 B8C9FAE2 4323EEA5 C56403A2 66CBA268 D82F5077} + @item @ref{Release 7_1_1, 7.1.1} @tab 2021-07-06 @tab 1132 KiB @tab @url{download/nncp-7.1.1.tar.xz, link} @url{download/nncp-7.1.1.tar.xz.sig, sign} @tab @code{B741C9E3 EC3DB342 893FE081 888C40E4 B94E4298 E5C1A8E0 BA4D179C C239CCCA} diff --git a/doc/news.ru.texi b/doc/news.ru.texi index eeaca1e..5671040 100644 --- a/doc/news.ru.texi +++ b/doc/news.ru.texi @@ -1,6 +1,66 @@ @node Новости @section Новости +@menu +* Релиз 7.2.1:: +* Релиз 7.2.0:: +* Релиз 7.1.1:: +* Релиз 7.1.0:: +* Релиз 7.0.0:: +* Релиз 6.6.0:: +* Релиз 6.5.0:: +* Релиз 6.4.0:: +* Релиз 6.3.0:: +* Релиз 6.2.1:: +* Релиз 6.2.0:: +* Релиз 6.1.0:: +* Релиз 6.0.0:: +* Релиз 5.6.0:: +* Релиз 5.5.1:: +* Релиз 5.5.0:: +* Релиз 5.4.1:: +* Релиз 5.4.0:: +* Релиз 5.3.3:: +* Релиз 5.3.2:: +* Релиз 5.3.1:: +* Релиз 5.3.0:: +* Релиз 5.2.1:: +* Релиз 5.2.0:: +* Релиз 5.1.2:: +* Релиз 5.1.1:: +* Релиз 5.1.0:: +* Релиз 5.0.0:: +* Релиз 4.1:: +* Релиз 4.0:: +* Релиз 3.4:: +* Релиз 3.3:: +* Релиз 3.2:: +* Релиз 3.1:: +* Релиз 3.0:: +* Релиз 2.0:: +* Релиз 1.0:: +* Релиз 0.12:: +* Релиз 0.11:: +* Релиз 0.10:: +* Релиз 0.9:: +* Релиз 0.8:: +* Релиз 0.7:: +* Релиз 0.6:: +* Релиз 0.5:: +* Релиз 0.4:: +* Релиз 0.3:: +* Релиз 0.2:: +@end menu + +@node Релиз 7.2.1 +@subsection Релиз 7.2.1 +@itemize + +@item +Небольшие оптимизации в online командах. + +@end itemize + @node Релиз 7.2.0 @subsection Релиз 7.2.0 @itemize diff --git a/doc/news.texi b/doc/news.texi index adf538b..dcb8087 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -3,6 +3,66 @@ See also this page @ref{Новости, on russian}. +@menu +* Release 7.2.1: Release 7_2_1. +* Release 7.2.0: Release 7_2_0. +* Release 7.1.1: Release 7_1_1. +* Release 7.1.0: Release 7_1_0. +* Release 7.0.0: Release 7_0_0. +* Release 6.6.0: Release 6_6_0. +* Release 6.5.0: Release 6_5_0. +* Release 6.4.0: Release 6_4_0. +* Release 6.3.0: Release 6_3_0. +* Release 6.2.1: Release 6_2_1. +* Release 6.2.0: Release 6_2_0. +* Release 6.1.0: Release 6_1_0. +* Release 6.0.0: Release 6_0_0. +* Release 5.6.0: Release 5_6_0. +* Release 5.5.1: Release 5_5_1. +* Release 5.5.0: Release 5_5_0. +* Release 5.4.1: Release 5_4_1. +* Release 5.4.0: Release 5_4_0. +* Release 5.3.3: Release 5_3_3. +* Release 5.3.2: Release 5_3_2. +* Release 5.3.1: Release 5_3_1. +* Release 5.3.0: Release 5_3_0. +* Release 5.2.1: Release 5_2_1. +* Release 5.2.0: Release 5_2_0. +* Release 5.1.2: Release 5_1_2. +* Release 5.1.1: Release 5_1_1. +* Release 5.1.0: Release 5_1_0. +* Release 5.0.0: Release 5_0_0. +* Release 4.1: Release 4_1. +* Release 4.0: Release 4_0. +* Release 3.4: Release 3_4. +* Release 3.3: Release 3_3. +* Release 3.2: Release 3_2. +* Release 3.1: Release 3_1. +* Release 3.0: Release 3_0. +* Release 2.0: Release 2_0. +* Release 1.0: Release 1_0. +* Release 0.12: Release 0_12. +* Release 0.11: Release 0_11. +* Release 0.10: Release 0_10. +* Release 0.9: Release 0_9. +* Release 0.8: Release 0_8. +* Release 0.7: Release 0_7. +* Release 0.6: Release 0_6. +* Release 0.5: Release 0_5. +* Release 0.4: Release 0_4. +* Release 0.3: Release 0_3. +* Release 0.2: Release 0_2. +@end menu + +@node Release 7_2_1 +@section Release 7.2.1 +@itemize + +@item +Small optimizations in online commands. + +@end itemize + @node Release 7_2_0 @section Release 7.2.0 @itemize diff --git a/src/nncp.go b/src/nncp.go index 4e0eb66..2c087b3 100644 --- a/src/nncp.go +++ b/src/nncp.go @@ -40,7 +40,7 @@ along with this program. If not, see .` const Base32Encoded32Len = 52 var ( - Version string = "7.2.0" + Version string = "7.2.1" Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) ) diff --git a/src/progress.go b/src/progress.go index 0c2f0ee..5ebc72b 100644 --- a/src/progress.go +++ b/src/progress.go @@ -132,9 +132,9 @@ func Progress(prefix string, les LEs) { } } progressBarsLock.RLock() - pb, exists := progressBars[pkt] + pb := progressBars[pkt] progressBarsLock.RUnlock() - if !exists { + if pb == nil { progressBarsLock.Lock() pb = ProgressBarNew(size, fullsize) progressBars[pkt] = pb @@ -156,8 +156,8 @@ func Progress(prefix string, les LEs) { func ProgressKill(pkt string) { progressBarsLock.Lock() - pb, exists := progressBars[pkt] - if exists { + pb := progressBars[pkt] + if pb != nil { pb.Kill() delete(progressBars, pkt) } diff --git a/src/sp.go b/src/sp.go index 1bb8f75..5937d35 100644 --- a/src/sp.go +++ b/src/sp.go @@ -806,6 +806,7 @@ func (state *SPState) StartWorkers( defer conn.Close() defer state.SetDead() defer state.wg.Done() + buf := make([]byte, MaxSPSize-SPHeadOverhead-SPFileOverhead) for { if state.NotAlive() { return @@ -874,6 +875,9 @@ func (state *SPState) StartWorkers( fdAndFullSize, exists := state.fds[pth] state.fdsLock.RUnlock() if !exists { + state.Ctx.LogD("sp-queue-open", lesp, func(les LEs) string { + return logMsg(les) + ": opening" + }) fd, err := os.Open(pth) if err != nil { state.Ctx.LogE("sp-queue-open", lesp, err, func(les LEs) string { @@ -895,7 +899,8 @@ func (state *SPState) StartWorkers( } fd := fdAndFullSize.fd fullSize := fdAndFullSize.fullSize - var buf []byte + lesp = append(lesp, LE{"FullSize", fullSize}) + var bufRead []byte if freq.Offset < uint64(fullSize) { state.Ctx.LogD("sp-file-seek", lesp, func(les LEs) string { return logMsg(les) + ": seeking" @@ -906,7 +911,6 @@ func (state *SPState) StartWorkers( }) return } - buf = make([]byte, MaxSPSize-SPHeadOverhead-SPFileOverhead) n, err := fd.Read(buf) if err != nil { state.Ctx.LogE("sp-file-read", lesp, err, func(les LEs) string { @@ -914,12 +918,13 @@ func (state *SPState) StartWorkers( }) return } - buf = buf[:n] + bufRead = buf[:n] lesp = append( les, LE{"XX", string(TTx)}, LE{"Pkt", pktName}, LE{"Size", int64(n)}, + LE{"FullSize", fullSize}, ) state.Ctx.LogD("sp-file-read", lesp, func(les LEs) string { return fmt.Sprintf( @@ -927,14 +932,15 @@ func (state *SPState) StartWorkers( logMsg(les), humanize.IBytes(uint64(n)), ) }) + } else { + state.closeFd(pth) } - state.closeFd(pth) payload = MarshalSP(SPTypeFile, SPFile{ Hash: freq.Hash, Offset: freq.Offset, - Payload: buf, + Payload: bufRead, }) - ourSize := freq.Offset + uint64(len(buf)) + ourSize := freq.Offset + uint64(len(bufRead)) lesp = append( les, LE{"XX", string(TTx)}, @@ -947,26 +953,25 @@ func (state *SPState) StartWorkers( Progress("Tx", lesp) } state.Lock() - if len(state.queueTheir) > 0 && *state.queueTheir[0].freq.Hash == *freq.Hash { + for i, q := range state.queueTheir { + if *q.freq.Hash != *freq.Hash { + continue + } if ourSize == uint64(fullSize) { state.Ctx.LogD("sp-file-finished", lesp, func(les LEs) string { return logMsg(les) + ": finished" }) - if len(state.queueTheir) > 1 { - state.queueTheir = state.queueTheir[1:] - } else { - state.queueTheir = state.queueTheir[:0] - } + state.queueTheir = append( + state.queueTheir[:i], + state.queueTheir[i+1:]..., + ) if state.Ctx.ShowPrgrs { delete(state.progressBars, pktName) } } else { - state.queueTheir[0].freq.Offset += uint64(len(buf)) + q.freq.Offset = ourSize } - } else { - state.Ctx.LogD("sp-file-disappeared", lesp, func(les LEs) string { - return logMsg(les) + ": queue disappeared" - }) + break } state.Unlock() } @@ -1319,9 +1324,9 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) { } fullsize := int64(0) state.RLock() - infoTheir, ok := state.infosTheir[*file.Hash] + infoTheir := state.infosTheir[*file.Hash] state.RUnlock() - if !ok { + if infoTheir == nil { state.Ctx.LogE("sp-file-open", lesp, err, func(les LEs) string { return logMsg(les) + ": unknown file" }) @@ -1515,16 +1520,17 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) { state.Lock() delete(state.infosTheir, *file.Hash) state.Unlock() - if hasherAndOffset != nil { - go func() { - spCheckerTasks <- SPCheckerTask{ - nodeId: state.Node.Id, - hsh: file.Hash, - mth: hasherAndOffset.mth, - done: state.payloads, - } - }() - } + go func() { + t := SPCheckerTask{ + nodeId: state.Node.Id, + hsh: file.Hash, + done: state.payloads, + } + if hasherAndOffset != nil { + t.mth = hasherAndOffset.mth + } + spCheckerTasks <- t + }() case SPTypeDone: lesp := append(les, LE{"Type", "done"}) diff --git a/src/toss.go b/src/toss.go index dc5573b..21d3007 100644 --- a/src/toss.go +++ b/src/toss.go @@ -120,8 +120,8 @@ func jobProcess( } argsStr := strings.Join(append([]string{handle}, args...), " ") les = append(les, LE{"Type", "exec"}, LE{"Dst", argsStr}) - cmdline, exists := sender.Exec[handle] - if !exists || len(cmdline) == 0 { + cmdline := sender.Exec[handle] + if len(cmdline) == 0 { err = errors.New("No handle found") ctx.LogE( "rx-no-handle", les, err, @@ -165,11 +165,11 @@ func jobProcess( return err } if len(sendmail) > 0 && ctx.NotifyExec != nil { - notify, exists := ctx.NotifyExec[sender.Name+"."+handle] - if !exists { - notify, exists = ctx.NotifyExec["*."+handle] + notify := ctx.NotifyExec[sender.Name+"."+handle] + if notify == nil { + notify = ctx.NotifyExec["*."+handle] } - if exists { + if notify != nil { cmd := exec.Command( sendmail[0], append(sendmail[1:], notify.To)...,