Archived
1

Try to reduce memory usage

This commit is contained in:
Jan-Lukas Else 2020-03-26 19:04:05 +01:00
parent c6ab26b63d
commit 6310ff356d
4 changed files with 20 additions and 36 deletions

View File

@ -59,17 +59,15 @@ func GetActor(name, iri, feed, pk string) (Actor, error) {
} }
jsonFile := storage + slash + "actors" + slash + name + slash + name + ".json" jsonFile := storage + slash + "actors" + slash + name + slash + name + ".json"
fileHandle, err := os.Open(jsonFile) fileHandle, err := os.Open(jsonFile)
defer func() {
_ = fileHandle.Close()
}()
if os.IsNotExist(err) { if os.IsNotExist(err) {
// File doesn't exist, maybe it's a new actor // File doesn't exist, maybe it's a new actor
return actor, nil return actor, nil
} }
byteValue, err := ioutil.ReadAll(fileHandle)
if err != nil {
// Ignore error, but return actor
return actor, nil
}
savedActor := ActorToSave{} savedActor := ActorToSave{}
err = json.Unmarshal(byteValue, &savedActor) err = json.NewDecoder(fileHandle).Decode(&savedActor)
if err != nil { if err != nil {
// Ignore error, but return actor // Ignore error, but return actor
return actor, nil return actor, nil
@ -91,11 +89,16 @@ func (a *Actor) save() error {
Name: a.Name, Name: a.Name,
Followers: a.followers, Followers: a.followers,
} }
actorJSON, err := json.MarshalIndent(actorToSave, "", "\t") f, err := os.OpenFile(storage+slash+"actors"+slash+a.Name+slash+a.Name+".json", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil { if err != nil {
return err return err
} }
err = ioutil.WriteFile(storage+slash+"actors"+slash+a.Name+slash+a.Name+".json", actorJSON, 0644) defer func() {
_ = f.Close()
}()
jsonEncoder := json.NewEncoder(f)
jsonEncoder.SetIndent("", "\t")
err = jsonEncoder.Encode(actorToSave)
if err != nil { if err != nil {
return err return err
} }
@ -121,14 +124,9 @@ func (a *Actor) PostArticle(url string) error {
if err != nil || !isSuccess(resp.StatusCode) { if err != nil || !isSuccess(resp.StatusCode) {
return errors.New("failed to fetch article") return errors.New("failed to fetch article")
} }
respBody, err := ioutil.ReadAll(resp.Body) err = json.NewDecoder(resp.Body).Decode(&article)
defer func() { _ = resp.Body.Close() }()
if err != nil { if err != nil {
return errors.New("failed to read response from fetched article") return errors.New("failed to decode fetched article")
}
err = json.Unmarshal(respBody, &article)
if err != nil {
return errors.New("failed to unmarshal fetched article")
} }
create["object"] = article create["object"] = article
go a.sendToFollowers(create) go a.sendToFollowers(create)

View File

@ -4,7 +4,6 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"io/ioutil"
"net/http" "net/http"
) )
@ -23,12 +22,7 @@ func allFeedItems(url string) ([]string, error) {
if err != nil { if err != nil {
return nil, errors.New("failed to get json feed") return nil, errors.New("failed to get json feed")
} }
defer func() { _ = resp.Body.Close() }() err = json.NewDecoder(resp.Body).Decode(&jsonFeed)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, errors.New("failed to read json feed")
}
err = json.Unmarshal(body, &jsonFeed)
if err != nil { if err != nil {
return nil, errors.New("failed to parse json feed") return nil, errors.New("failed to parse json feed")
} }

16
http.go
View File

@ -4,7 +4,6 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"io/ioutil"
"log" "log"
"math" "math"
"net/http" "net/http"
@ -62,17 +61,12 @@ func Serve() {
link1["href"] = actor.iri link1["href"] = actor.iri
links[0] = link1 links[0] = link1
responseMap["links"] = links responseMap["links"] = links
response, _ := json.Marshal(responseMap) _ = json.NewEncoder(w).Encode(responseMap)
_, _ = w.Write(response)
} }
inboxHandler := func(w http.ResponseWriter, r *http.Request) { inboxHandler := func(w http.ResponseWriter, r *http.Request) {
b, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
activity := make(map[string]interface{}) activity := make(map[string]interface{})
err = json.Unmarshal(b, &activity) err := json.NewDecoder(r.Body).Decode(&activity)
if err != nil { if err != nil {
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
return return
@ -129,7 +123,7 @@ func Serve() {
} }
default: default:
// Log inbox request // Log inbox request
logInbox(actor, b) logInbox(actor, &activity)
} }
// Return 201 // Return 201
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
@ -145,13 +139,13 @@ func Serve() {
log.Fatal(http.ListenAndServe(":8081", nil)) log.Fatal(http.ListenAndServe(":8081", nil))
} }
func logInbox(actor *Actor, b []byte) { func logInbox(actor *Actor, activity *map[string]interface{}) {
f, err := os.OpenFile(storage+slash+"actors"+slash+actor.Name+slash+"inbox", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) f, err := os.OpenFile(storage+slash+"actors"+slash+actor.Name+slash+"inbox", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil { if err != nil {
return return
} }
defer func() { _ = f.Close() }() defer func() { _ = f.Close() }()
_, _ = f.Write(b) _ = json.NewEncoder(f).Encode(activity)
_, _ = f.WriteString("\n---\n") _, _ = f.WriteString("\n---\n")
} }

View File

@ -4,7 +4,6 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil"
"net/http" "net/http"
) )
@ -47,12 +46,11 @@ func get(iri string) (info map[string]interface{}, err error) {
if err != nil { if err != nil {
return return
} }
responseData, _ := ioutil.ReadAll(resp.Body)
if !isSuccess(resp.StatusCode) { if !isSuccess(resp.StatusCode) {
return return
} }
var e interface{} var e interface{}
err = json.Unmarshal(responseData, &e) err = json.NewDecoder(resp.Body).Decode(&e)
if err != nil { if err != nil {
return return
} }